{"cells":[{"cell_type":"markdown","metadata":{"graffitiCellId":"id_hkbldjq","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"8397DCD3D04243F88F25751AB221C99E","mdEditEnable":false},"source":"# 9.3 目标检测和边界框"},{"cell_type":"code","execution_count":4,"metadata":{"graffitiCellId":"id_fm9iskh","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"1618756528DB4C518FAF47C7904A440A","collapsed":false,"scrolled":false},"outputs":[],"source":"%matplotlib inline\nfrom PIL import Image\n\nimport sys\nsys.path.append('/home/kesci/input/')\nimport d2lzh1981 as d2l"},{"cell_type":"code","execution_count":5,"metadata":{"graffitiCellId":"id_j7fclka","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"C9CAC60A6ADF4814AA1EFBB838B80254","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/C9CAC60A6ADF4814AA1EFBB838B80254/q5vrftusng.svg\">"},"transient":{}}],"source":"# 展示用于目标检测的图\nd2l.set_figsize()\nimg = Image.open('/home/kesci/input/img2083/img/catdog.jpg')\nd2l.plt.imshow(img); # 加分号只显示图"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_n61fsiz","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"4750E0470A374AAD89C5A983BF09EAD1","mdEditEnable":false},"source":"## 9.3.1 边界框"},{"cell_type":"code","execution_count":6,"metadata":{"graffitiCellId":"id_96o216d","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"B73D8B9880ED420FA06E1002AAC50981","collapsed":false,"scrolled":false},"outputs":[],"source":"# bbox是bounding box的缩写\ndog_bbox, cat_bbox = [60, 45, 378, 516], [400, 112, 655, 493]"},{"cell_type":"code","execution_count":7,"metadata":{"graffitiCellId":"id_y09udcv","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"DB52EF377A4C4F68873DFCF19D3C16CC","collapsed":false,"scrolled":false},"outputs":[],"source":"def bbox_to_rect(bbox, color):  # 本函数已保存在d2lzh_pytorch中方便以后使用\n    # 将边界框(左上x, 左上y, 右下x, 右下y)格式转换成matplotlib格式：\n    # ((左上x, 左上y), 宽, 高)\n    return d2l.plt.Rectangle(\n        xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],\n        fill=False, edgecolor=color, linewidth=2)"},{"cell_type":"code","execution_count":8,"metadata":{"graffitiCellId":"id_kgphoy1","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"D3875332DE3140BA88D963B12739617F","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/D3875332DE3140BA88D963B12739617F/q5vrg7oclo.svg\">"},"transient":{}}],"source":"fig = d2l.plt.imshow(img)\nfig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))\nfig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_66i83p8","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"0B157D1FA2FF44FABC8BEAB55270954F","mdEditEnable":false},"source":"# 9.4 锚框\n\n目标检测算法通常会在输入图像中采样大量的区域，然后判断这些区域中是否包含我们感兴趣的目标，并调整区域边缘从而更准确地预测目标的真实边界框（ground-truth bounding box）。不同的模型使用的区域采样方法可能不同。这里我们介绍其中的一种方法：它以每个像素为中心生成多个大小和宽高比（aspect ratio）不同的边界框。这些边界框被称为锚框（anchor box）。我们将在后面基于锚框实践目标检测。\n> 注: 建议想学习用PyTorch做检测的童鞋阅读一下仓库[a-PyTorch-Tutorial-to-Object-Detection](https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection)。\n\n先导入一下相关包。\n"},{"cell_type":"code","execution_count":9,"metadata":{"graffitiCellId":"id_1f8r8p0","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"F6A36EF6551F49309F60F53B6F2D23C7","collapsed":false,"scrolled":false},"outputs":[{"output_type":"stream","text":"1.1.0\n","name":"stdout"}],"source":"import numpy as np\nimport math\nimport torch\nimport os\nIMAGE_DIR = '/home/kesci/input/img2083/img/'\nprint(torch.__version__)"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_r7hb3z0","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"AA44CF027C5A422F865DAA109E773A4E","mdEditEnable":false},"source":"## 9.4.1 生成多个锚框"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_j0hr7at","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"E93C5C06547848018A990A9A1B0710E4","mdEditEnable":false},"source":"假设输入图像高为 $h$，宽为$w$。我们分别以图像的每个像素为中心生成不同形状的锚框。设大小为$s\\in (0,1]$且宽高比为$r > 0$，那么锚框的宽和高将分别为$ws\\sqrt{r}$和$hs/\\sqrt{r}$。当中心位置给定时，已知宽和高的锚框是确定的。\n\n下面我们分别设定好一组大小$s_1,\\ldots,s_n$和一组宽高比$r_1,\\ldots,r_m$。如果以每个像素为中心时使用所有的大小与宽高比的组合，输入图像将一共得到$whnm$个锚框。虽然这些锚框可能覆盖了所有的真实边界框，但计算复杂度容易过高。因此，我们通常只对包含$s_1$或$r_1$的大小与宽高比的组合感兴趣，即\n\n$$\n(s_1, r_1), (s_1, r_2), \\ldots, (s_1, r_m), (s_2, r_1), (s_3, r_1), \\ldots, (s_n, r_1).\n$$\n\n也就是说，以相同像素为中心的锚框的数量为$n+m-1$。对于整个输入图像，我们将一共生成$wh(n+m-1)$个锚框。\n\n以上生成锚框的方法已实现在`MultiBoxPrior`函数中。指定输入、一组大小和一组宽高比，该函数将返回输入的所有锚框。"},{"cell_type":"code","execution_count":10,"metadata":{"graffitiCellId":"id_0m38c9r","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"27C845C20AB44B2FB7D40936199E72D2","collapsed":false,"scrolled":false},"outputs":[{"output_type":"stream","text":"w = 728, h = 561\n","name":"stdout"}],"source":"d2l.set_figsize()\nimg = Image.open(os.path.join(IMAGE_DIR, 'catdog.jpg'))\nw, h = img.size\nprint(\"w = %d, h = %d\" % (w, h))\n\n# d2l.plt.imshow(img);  # 加分号只显示图"},{"cell_type":"code","execution_count":11,"metadata":{"graffitiCellId":"id_ddbxqxt","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"A1F0E2CCC9164DD184B5B896B7B2BC17","collapsed":false,"scrolled":false},"outputs":[],"source":"# 本函数已保存在d2lzh_pytorch包中方便以后使用\ndef MultiBoxPrior(feature_map, sizes=[0.75, 0.5, 0.25], ratios=[1, 2, 0.5]):\n    \"\"\"\n    # 按照「9.4.1. 生成多个锚框」所讲的实现, anchor表示成(xmin, ymin, xmax, ymax).\n    https://zh.d2l.ai/chapter_computer-vision/anchor.html\n    Args:\n        feature_map: torch tensor, Shape: [N, C, H, W].\n        sizes: List of sizes (0~1) of generated MultiBoxPriores. \n        ratios: List of aspect ratios (non-negative) of generated MultiBoxPriores. \n    Returns:\n        anchors of shape (1, num_anchors, 4). 由于batch里每个都一样, 所以第一维为1\n    \"\"\"\n    pairs = [] # pair of (size, sqrt(ration))\n    \n    # 生成n + m -1个框\n    for r in ratios:\n        pairs.append([sizes[0], math.sqrt(r)])\n    for s in sizes[1:]:\n        pairs.append([s, math.sqrt(ratios[0])])\n    \n    pairs = np.array(pairs)\n    \n    # 生成相对于坐标中心点的框（x,y,x,y）\n    ss1 = pairs[:, 0] * pairs[:, 1] # size * sqrt(ration)\n    ss2 = pairs[:, 0] / pairs[:, 1] # size / sqrt(ration)\n    \n    base_anchors = np.stack([-ss1, -ss2, ss1, ss2], axis=1) / 2\n    \n    #将坐标点和anchor组合起来生成hw（n+m-1）个框输出\n    h, w = feature_map.shape[-2:]\n    shifts_x = np.arange(0, w) / w\n    shifts_y = np.arange(0, h) / h\n    shift_x, shift_y = np.meshgrid(shifts_x, shifts_y)\n    \n    shift_x = shift_x.reshape(-1)\n    shift_y = shift_y.reshape(-1)\n    \n    shifts = np.stack((shift_x, shift_y, shift_x, shift_y), axis=1)\n    anchors = shifts.reshape((-1, 1, 4)) + base_anchors.reshape((1, -1, 4))\n    \n    return torch.tensor(anchors, dtype=torch.float32).view(1, -1, 4)"},{"cell_type":"code","execution_count":12,"metadata":{"graffitiCellId":"id_v691kg0","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"0A6F451B5C9D409BBF406F48B67A58EF","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"torch.Size([1, 2042040, 4])"},"transient":{},"execution_count":12}],"source":"X = torch.Tensor(1, 3, h, w)  # 构造输入数据\nY = MultiBoxPrior(X, sizes=[0.75, 0.5, 0.25], ratios=[1, 2, 0.5])\nY.shape\n"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_jc7hpds","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"6C1B7D28BBCB4D9DA905F380EDA3BE1E","mdEditEnable":false},"source":"\n我们看到，返回锚框变量`y`的形状为（1，锚框个数，4）。将锚框变量`y`的形状变为（图像高，图像宽，以相同像素为中心的锚框个数，4）后，我们就可以通过指定像素位置来获取所有以该像素为中心的锚框了。下面的例子里我们访问以（250，250）为中心的第一个锚框。它有4个元素，分别是锚框左上角的$x$和$y$轴坐标和右下角的$x$和$y$轴坐标，其中$x$和$y$轴的坐标值分别已除以图像的宽和高，因此值域均为0和1之间。\n"},{"cell_type":"code","execution_count":13,"metadata":{"graffitiCellId":"id_tlhm5sm","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"0A93AC47957A43868235C9431E757EA5","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"tensor([-0.0316,  0.0706,  0.7184,  0.8206])"},"transient":{},"execution_count":13}],"source":"# 展示某个像素点的anchor\nboxes = Y.reshape((h, w, 5, 4))\nboxes[250, 250, 0, :]# * torch.tensor([w, h, w, h], dtype=torch.float32)\n# 第一个size和ratio分别为0.75和1, 则宽高均为0.75 = 0.7184 + 0.0316 = 0.8206 - 0.0706"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_8ix1b72","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"A61011D1BB9A4CC99B6B7638B4E41489","mdEditEnable":false},"source":"> 可以验证一下以上输出对不对：size和ratio分别为0.75和1, 则(归一化后的)宽高均为0.75, 所以输出是正确的（0.75 = 0.7184 + 0.0316 = 0.8206 - 0.0706）。\n\n为了描绘图像中以某个像素为中心的所有锚框，我们先定义`show_bboxes`函数以便在图像上画出多个边界框。"},{"cell_type":"code","execution_count":14,"metadata":{"graffitiCellId":"id_nc2s0ua","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"BE181FA7968F41619C3E86B1C5FEA8FA","collapsed":false,"scrolled":false},"outputs":[],"source":"# 本函数已保存在dd2lzh_pytorch包中方便以后使用\ndef show_bboxes(axes, bboxes, labels=None, colors=None):\n    def _make_list(obj, default_values=None):\n        if obj is None:\n            obj = default_values\n        elif not isinstance(obj, (list, tuple)):\n            obj = [obj]\n        return obj\n\n    labels = _make_list(labels)\n    colors = _make_list(colors, ['b', 'g', 'r', 'm', 'c'])\n    for i, bbox in enumerate(bboxes):\n        color = colors[i % len(colors)]\n        rect = d2l.bbox_to_rect(bbox.detach().cpu().numpy(), color)\n        axes.add_patch(rect)\n        if labels and len(labels) > i:\n            text_color = 'k' if color == 'w' else 'w'\n            axes.text(rect.xy[0], rect.xy[1], labels[i],\n                      va='center', ha='center', fontsize=6, color=text_color,\n                      bbox=dict(facecolor=color, lw=0))"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_wnjstn6","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"B3B29AA7DCB94AC1A80792E5A57AC319","mdEditEnable":false},"source":"刚刚我们看到，变量`boxes`中$x$和$y$轴的坐标值分别已除以图像的宽和高。在绘图时，我们需要恢复锚框的原始坐标值，并因此定义了变量`bbox_scale`。现在，我们可以画出图像中以(250, 250)为中心的所有锚框了。可以看到，大小为0.75且宽高比为1的锚框较好地覆盖了图像中的狗。"},{"cell_type":"code","execution_count":15,"metadata":{"graffitiCellId":"id_47p177b","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"28FFDB57F6CB43A69163325A4D136A48","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/28FFDB57F6CB43A69163325A4D136A48/q5vrnk8tho.svg\">"},"transient":{}}],"source":"# 展示 250 250像素点的anchor\nd2l.set_figsize()\nfig = d2l.plt.imshow(img)\nbbox_scale = torch.tensor([[w, h, w, h]], dtype=torch.float32)\nshow_bboxes(fig.axes, boxes[250, 250, :, :] * bbox_scale,\n            ['s=0.75, r=1', 's=0.75, r=2', 's=0.75, r=0.5', 's=0.5, r=1', 's=0.25, r=1'])"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_kxinbbk","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"E97D198893014D269A056372142A806C","mdEditEnable":false},"source":"## 9.4.2 交并比"},{"attachments":{"9.4_iou.svg":{"image/svg+xml":["PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTY4cHQiIGhlaWdodD0iMTEwcHQiIHZpZXdCb3g9IjAgMCAxNjggMTEwIiB2ZXJzaW9uPSIxLjEiPgo8ZGVmcz4KPGc+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9IiIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC0xIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA4LjIwMzEyNSAtNi44MjgxMjUgTCA0IC02LjgyODEyNSBMIDQgMC45MDYyNSBMIDQuNjI1IDAuOTA2MjUgTCA0LjYyNSAwLjM0Mzc1IEwgNy41NzgxMjUgMC4zNDM3NSBMIDcuNTc4MTI1IDAuOTA2MjUgTCA4LjIwMzEyNSAwLjkwNjI1IFogTSA0LjYyNSAtMC4yNjU2MjUgTCA0LjYyNSAtMS44NTkzNzUgTCA3LjU3ODEyNSAtMS44NTkzNzUgTCA3LjU3ODEyNSAtMC4yNjU2MjUgWiBNIDQuNjI1IC0yLjQ2ODc1IEwgNC42MjUgLTQuMDYyNSBMIDcuNTc4MTI1IC00LjA2MjUgTCA3LjU3ODEyNSAtMi40Njg3NSBaIE0gNC42MjUgLTQuNjU2MjUgTCA0LjYyNSAtNi4yMDMxMjUgTCA3LjU3ODEyNSAtNi4yMDMxMjUgTCA3LjU3ODEyNSAtNC42NTYyNSBaIE0gMi40MjE4NzUgLTMuODEyNSBDIDIuNjcxODc1IC0zLjQ2ODc1IDIuOTY4NzUgLTMuMDQ2ODc1IDMuMzEyNSAtMi41MTU2MjUgTCAzLjY1NjI1IC0zLjA0Njg3NSBDIDMuMjUgLTMuNTc4MTI1IDIuODI4MTI1IC00LjA2MjUgMi40MjE4NzUgLTQuNDg0Mzc1IEwgMi40MjE4NzUgLTQuOTY4NzUgTCAzLjU3ODEyNSAtNC45Njg3NSBMIDMuNTc4MTI1IC01LjU5Mzc1IEwgMi40MjE4NzUgLTUuNTkzNzUgTCAyLjQyMTg3NSAtNy4zNDM3NSBMIDEuNzgxMjUgLTcuMzQzNzUgTCAxLjc4MTI1IC01LjU5Mzc1IEwgMC41MTU2MjUgLTUuNTkzNzUgTCAwLjUxNTYyNSAtNC45Njg3NSBMIDEuNzY1NjI1IC00Ljk2ODc1IEMgMS40Njg3NSAtMy44NDM3NSAxLjAxNTYyNSAtMi44NDM3NSAwLjM0Mzc1IC0xLjk2ODc1IEwgMC42MDkzNzUgLTEuMzI4MTI1IEMgMS4wOTM3NSAtMi4wMzEyNSAxLjQ2ODc1IC0yLjgxMjUgMS43ODEyNSAtMy42NzE4NzUgTCAxLjc4MTI1IDAuODkwNjI1IEwgMi40MjE4NzUgMC44OTA2MjUgWiBNIDIuNDIxODc1IC0zLjgxMjUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgwLTIiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDAuNTE1NjI1IC02LjI4MTI1IEwgMC41MTU2MjUgLTUuNjU2MjUgTCA4LjQ4NDM3NSAtNS42NTYyNSBMIDguNDg0Mzc1IC02LjI4MTI1IEwgNC45Mzc1IC02LjI4MTI1IEMgNC43ODEyNSAtNi43MDMxMjUgNC41OTM3NSAtNy4wNzgxMjUgNC40MjE4NzUgLTcuNDIxODc1IEwgMy43MDMxMjUgLTcuMjk2ODc1IEMgMy44OTA2MjUgLTYuOTg0Mzc1IDQuMDc4MTI1IC02LjY1NjI1IDQuMjM0Mzc1IC02LjI4MTI1IFogTSA1LjkyMTg3NSAtNS4zOTA2MjUgTCA1LjQ4NDM3NSAtNC45Njg3NSBDIDYuNTMxMjUgLTQuMTA5Mzc1IDcuMzU5Mzc1IC0zLjI5Njg3NSA3Ljk1MzEyNSAtMi41NDY4NzUgTCA4LjQzNzUgLTMuMDMxMjUgQyA3Ljc2NTYyNSAtMy44MTI1IDYuOTIxODc1IC00LjU5Mzc1IDUuOTIxODc1IC01LjM5MDYyNSBaIE0gNi4wMTU2MjUgLTMuNzAzMTI1IEMgNS42MjUgLTIuOTUzMTI1IDUuMTI1IC0yLjI5Njg3NSA0LjUxNTYyNSAtMS43MTg3NSBDIDMuODc1IC0yLjI2NTYyNSAzLjM0Mzc1IC0yLjkwNjI1IDIuOTUzMTI1IC0zLjY0MDYyNSBMIDIuMzkwNjI1IC0zLjMyODEyNSBDIDIuODEyNSAtMi41NzgxMjUgMy4zNTkzNzUgLTEuODkwNjI1IDQuMDE1NjI1IC0xLjI5Njg3NSBDIDMuMDYyNSAtMC41NzgxMjUgMS44OTA2MjUgLTAuMDMxMjUgMC40Njg3NSAwLjMyODEyNSBMIDAuODU5Mzc1IDAuOTIxODc1IEMgMi4yOTY4NzUgMC41NDY4NzUgMy41MzEyNSAtMC4wNDY4NzUgNC41MzEyNSAtMC44NTkzNzUgQyA1LjUxNTYyNSAtMC4xMDkzNzUgNi43MTg3NSAwLjQ2ODc1IDguMTg3NSAwLjg3NSBMIDguNTkzNzUgMC4yODEyNSBDIDcuMTg3NSAtMC4wNzgxMjUgNiAtMC42MDkzNzUgNS4wMzEyNSAtMS4zMTI1IEMgNS42NTYyNSAtMS45MDYyNSA2LjE3MTg3NSAtMi42MjUgNi42MDkzNzUgLTMuNDUzMTI1IFogTSAzLjAzMTI1IC01LjM3NSBDIDIuMzQzNzUgLTQuNTMxMjUgMS41MTU2MjUgLTMuODEyNSAwLjU0Njg3NSAtMy4xNzE4NzUgTCAwLjk1MzEyNSAtMi42MjUgQyAxLjk2ODc1IC0zLjI5Njg3NSAyLjgxMjUgLTQuMDc4MTI1IDMuNDg0Mzc1IC00Ljk2ODc1IFogTSAzLjAzMTI1IC01LjM3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMyI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMC41IC03IEwgMC41IC02LjM1OTM3NSBMIDQuMjM0Mzc1IC02LjM1OTM3NSBDIDQuMTcxODc1IC01Ljk2ODc1IDQuMDQ2ODc1IC01LjU5Mzc1IDMuOTA2MjUgLTUuMjE4NzUgTCAxLjAxNTYyNSAtNS4yMTg3NSBMIDEuMDE1NjI1IDAuOTIxODc1IEwgMS42MjUgMC45MjE4NzUgTCAxLjYyNSAwLjQ4NDM3NSBMIDcuMzkwNjI1IDAuNDg0Mzc1IEwgNy4zOTA2MjUgMC45MjE4NzUgTCA4LjAxNTYyNSAwLjkyMTg3NSBMIDguMDE1NjI1IC01LjIxODc1IEwgNC41NjI1IC01LjIxODc1IEMgNC43MDMxMjUgLTUuNTc4MTI1IDQuODI4MTI1IC01Ljk2ODc1IDQuODkwNjI1IC02LjM1OTM3NSBMIDguNSAtNi4zNTkzNzUgTCA4LjUgLTcgWiBNIDEuNjI1IC0wLjEwOTM3NSBMIDEuNjI1IC00LjYyNSBMIDIuODc1IC00LjYyNSBMIDIuODc1IC0wLjEwOTM3NSBaIE0gMy40Njg3NSAtMC4xMDkzNzUgTCAzLjQ2ODc1IC0xLjI2NTYyNSBMIDUuNTMxMjUgLTEuMjY1NjI1IEwgNS41MzEyNSAtMC4xMDkzNzUgWiBNIDYuMTI1IC0wLjEwOTM3NSBMIDYuMTI1IC00LjYyNSBMIDcuMzkwNjI1IC00LjYyNSBMIDcuMzkwNjI1IC0wLjEwOTM3NSBaIE0gMy40Njg3NSAtMS44NDM3NSBMIDMuNDY4NzUgLTIuOTM3NSBMIDUuNTMxMjUgLTIuOTM3NSBMIDUuNTMxMjUgLTEuODQzNzUgWiBNIDMuNDY4NzUgLTMuNTE1NjI1IEwgMy40Njg3NSAtNC42MjUgTCA1LjUzMTI1IC00LjYyNSBMIDUuNTMxMjUgLTMuNTE1NjI1IFogTSAzLjQ2ODc1IC0zLjUxNTYyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtNCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMC42ODc1IC01Ljk2ODc1IEMgMS4xMjUgLTYuMDE1NjI1IDEuNTMxMjUgLTYuMDkzNzUgMS45MjE4NzUgLTYuMTcxODc1IEwgMS45MjE4NzUgLTQuODkwNjI1IEwgMC41OTM3NSAtNC44OTA2MjUgTCAwLjU5Mzc1IC00LjI2NTYyNSBMIDEuODkwNjI1IC00LjI2NTYyNSBDIDEuNTc4MTI1IC0zLjIxODc1IDEuMDQ2ODc1IC0yLjI5Njg3NSAwLjMyODEyNSAtMS40ODQzNzUgTCAwLjU5Mzc1IC0wLjgxMjUgQyAxLjE0MDYyNSAtMS41MTU2MjUgMS41NzgxMjUgLTIuMzI4MTI1IDEuOTIxODc1IC0zLjIwMzEyNSBMIDEuOTIxODc1IDAuODU5Mzc1IEwgMi41MzEyNSAwLjg1OTM3NSBMIDIuNTMxMjUgLTMuMjUgQyAyLjc5Njg3NSAtMi44OTA2MjUgMy4xMDkzNzUgLTIuMzkwNjI1IDMuNDg0Mzc1IC0xLjc2NTYyNSBMIDMuODQzNzUgLTIuMjk2ODc1IEMgMy4zOTA2MjUgLTIuODU5Mzc1IDIuOTY4NzUgLTMuMzU5Mzc1IDIuNTMxMjUgLTMuODEyNSBMIDIuNTMxMjUgLTQuMjY1NjI1IEwgMy42NDA2MjUgLTQuMjY1NjI1IEwgMy42NDA2MjUgLTQuODkwNjI1IEwgMi41MzEyNSAtNC44OTA2MjUgTCAyLjUzMTI1IC02LjMxMjUgQyAyLjkwNjI1IC02LjQwNjI1IDMuMjY1NjI1IC02LjUgMy41OTM3NSAtNi42MjUgTCAzLjM1OTM3NSAtNy4yMzQzNzUgQyAyLjU2MjUgLTYuOTA2MjUgMS42MjUgLTYuNzAzMTI1IDAuNTYyNSAtNi41OTM3NSBaIE0gNC4xNzE4NzUgLTYuODEyNSBMIDQuMTcxODc1IC0yLjYyNSBMIDguMDYyNSAtMi42MjUgTCA4LjA2MjUgLTYuODEyNSBaIE0gNy40MjE4NzUgLTMuMjM0Mzc1IEwgNC44MjgxMjUgLTMuMjM0Mzc1IEwgNC44MjgxMjUgLTYuMTg3NSBMIDcuNDIxODc1IC02LjE4NzUgWiBNIDQuOTUzMTI1IC0yLjA0Njg3NSBDIDQuNTQ2ODc1IC0xLjA0Njg3NSA0LjA0Njg3NSAtMC4xODc1IDMuNDY4NzUgMC41MzEyNSBMIDQuMDE1NjI1IDAuOTIxODc1IEMgNC41OTM3NSAwLjE1NjI1IDUuMTA5Mzc1IC0wLjczNDM3NSA1LjUzMTI1IC0xLjc2NTYyNSBaIE0gNy4xNTYyNSAtMi4wOTM3NSBMIDYuNjQwNjI1IC0xLjc2NTYyNSBDIDcuMjY1NjI1IC0wLjc5Njg3NSA3Ljc4MTI1IDAuMDkzNzUgOC4xNTYyNSAwLjkwNjI1IEwgOC43MDMxMjUgMC41MTU2MjUgQyA4LjM0Mzc1IC0wLjIxODc1IDcuODI4MTI1IC0xLjA5Mzc1IDcuMTU2MjUgLTIuMDkzNzUgWiBNIDcuMTU2MjUgLTIuMDkzNzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgwLTUiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDIuNzM0Mzc1IC03LjQ1MzEyNSBMIDIuMTQwNjI1IC03LjE1NjI1IEMgMi40Mzc1IC02LjczNDM3NSAyLjczNDM3NSAtNi4yMzQzNzUgMyAtNS42NzE4NzUgTCAzLjU3ODEyNSAtNS45Njg3NSBDIDMuMzEyNSAtNi41IDMuMDMxMjUgLTcgMi43MzQzNzUgLTcuNDUzMTI1IFogTSA1LjczNDM3NSAtNS4wMzEyNSBMIDUuNzM0Mzc1IC0yLjkyMTg3NSBMIDMuMzQzNzUgLTIuOTIxODc1IEMgMy4zOTA2MjUgLTMuMjk2ODc1IDMuNDA2MjUgLTMuNzAzMTI1IDMuNDIxODc1IC00LjE1NjI1IEwgMy40MjE4NzUgLTUuMDMxMjUgWiBNIDUuNzM0Mzc1IC0yLjI5Njg3NSBMIDUuNzM0Mzc1IDAuODU5Mzc1IEwgNi40MDYyNSAwLjg1OTM3NSBMIDYuNDA2MjUgLTIuMjk2ODc1IEwgOC41MTU2MjUgLTIuMjk2ODc1IEwgOC41MTU2MjUgLTIuOTIxODc1IEwgNi40MDYyNSAtMi45MjE4NzUgTCA2LjQwNjI1IC01LjAzMTI1IEwgOC4xNTYyNSAtNS4wMzEyNSBMIDguMTU2MjUgLTUuNjU2MjUgTCA2LjE0MDYyNSAtNS42NTYyNSBDIDYuNDUzMTI1IC02LjEwOTM3NSA2LjczNDM3NSAtNi42MjUgNi45ODQzNzUgLTcuMjAzMTI1IEwgNi4yOTY4NzUgLTcuNDUzMTI1IEMgNi4wMzEyNSAtNi44MTI1IDUuNzUgLTYuMjAzMTI1IDUuNDA2MjUgLTUuNjU2MjUgTCAwLjg1OTM3NSAtNS42NTYyNSBMIDAuODU5Mzc1IC01LjAzMTI1IEwgMi43NjU2MjUgLTUuMDMxMjUgTCAyLjc2NTYyNSAtNC4xNTYyNSBDIDIuNzUgLTMuNzE4NzUgMi43MzQzNzUgLTMuMjk2ODc1IDIuNjcxODc1IC0yLjkyMTg3NSBMIDAuNSAtMi45MjE4NzUgTCAwLjUgLTIuMjk2ODc1IEwgMi41NzgxMjUgLTIuMjk2ODc1IEMgMi41IC0xLjkzNzUgMi40MDYyNSAtMS42MjUgMi4yODEyNSAtMS4zNDM3NSBDIDEuOTY4NzUgLTAuNjQwNjI1IDEuMzkwNjI1IC0wLjA3ODEyNSAwLjU3ODEyNSAwLjMyODEyNSBMIDAuOTUzMTI1IDAuOTIxODc1IEMgMS44MTI1IDAuNSAyLjQyMTg3NSAtMC4wOTM3NSAyLjc5Njg3NSAtMC44NTkzNzUgQyAyLjk4NDM3NSAtMS4yNjU2MjUgMy4xNDA2MjUgLTEuNzM0Mzc1IDMuMjUgLTIuMjk2ODc1IFogTSA1LjczNDM3NSAtMi4yOTY4NzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTAiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSIiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDEtMSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMi44MjgxMjUgMCBMIDIuODI4MTI1IC0wLjE3MTg3NSBDIDIuMDkzNzUgLTAuMjAzMTI1IDEuOTUzMTI1IC0wLjMyODEyNSAxLjk1MzEyNSAtMS4wMTU2MjUgTCAxLjk1MzEyNSAtNC45NTMxMjUgQyAxLjk1MzEyNSAtNS42NDA2MjUgMi4wNzgxMjUgLTUuNzUgMi44MjgxMjUgLTUuNzgxMjUgTCAyLjgyODEyNSAtNS45NTMxMjUgTCAwLjE1NjI1IC01Ljk1MzEyNSBMIDAuMTU2MjUgLTUuNzgxMjUgQyAwLjkyMTg3NSAtNS43MzQzNzUgMS4wMzEyNSAtNS42NzE4NzUgMS4wMzEyNSAtNC45NTMxMjUgTCAxLjAzMTI1IC0xLjAxNTYyNSBDIDEuMDMxMjUgLTAuMzEyNSAwLjkyMTg3NSAtMC4yMDMxMjUgMC4xNTYyNSAtMC4xNzE4NzUgTCAwLjE1NjI1IDAgWiBNIDIuODI4MTI1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTIiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDQuMjM0Mzc1IC0yLjA3ODEyNSBDIDQuMjM0Mzc1IC0zLjMyODEyNSAzLjM5MDYyNSAtNC4xNDA2MjUgMi4yODEyNSAtNC4xNDA2MjUgQyAxLjA3ODEyNSAtNC4xNDA2MjUgMC4yNjU2MjUgLTMuMjk2ODc1IDAuMjY1NjI1IC0yLjA0Njg3NSBDIDAuMjY1NjI1IC0wLjc5Njg3NSAxLjEwOTM3NSAwLjA5Mzc1IDIuMjAzMTI1IDAuMDkzNzUgQyAzLjQyMTg3NSAwLjA5Mzc1IDQuMjM0Mzc1IC0wLjgyODEyNSA0LjIzNDM3NSAtMi4wNzgxMjUgWiBNIDMuNDIxODc1IC0xLjg0Mzc1IEMgMy40MjE4NzUgLTAuNzk2ODc1IDMuMDMxMjUgLTAuMTU2MjUgMi4zNTkzNzUgLTAuMTU2MjUgQyAyLjAzMTI1IC0wLjE1NjI1IDEuNzUgLTAuMzI4MTI1IDEuNTQ2ODc1IC0wLjYwOTM3NSBDIDEuMjE4NzUgLTEuMDkzNzUgMS4wNzgxMjUgLTEuNzUgMS4wNzgxMjUgLTIuNDUzMTI1IEMgMS4wNzgxMjUgLTMuMzU5Mzc1IDEuNSAtMy44OTA2MjUgMi4xMDkzNzUgLTMuODkwNjI1IEMgMi41IC0zLjg5MDYyNSAyLjc1IC0zLjcwMzEyNSAyLjk2ODc1IC0zLjQzNzUgQyAzLjI2NTYyNSAtMy4wNjI1IDMuNDIxODc1IC0yLjQ1MzEyNSAzLjQyMTg3NSAtMS44NDM3NSBaIE0gMy40MjE4NzUgLTEuODQzNzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTMiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDYuMzQzNzUgLTUuOTUzMTI1IEwgNC4yNSAtNS45NTMxMjUgTCA0LjI1IC01Ljc4MTI1IEMgNC45ODQzNzUgLTUuNzM0Mzc1IDUuMTA5Mzc1IC01LjU0Njg3NSA1LjEwOTM3NSAtNC42MDkzNzUgTCA1LjEwOTM3NSAtMi4yNSBDIDUuMTA5Mzc1IC0xLjUxNTYyNSA1LjA2MjUgLTEuMTU2MjUgNC43NjU2MjUgLTAuNzk2ODc1IEMgNC40ODQzNzUgLTAuNDY4NzUgMy45ODQzNzUgLTAuMjY1NjI1IDMuNDA2MjUgLTAuMjY1NjI1IEMgMi44OTA2MjUgLTAuMjY1NjI1IDIuNTE1NjI1IC0wLjQyMTg3NSAyLjI1IC0wLjY3MTg3NSBDIDEuODkwNjI1IC0xLjAzMTI1IDEuODU5Mzc1IC0xLjQzNzUgMS44NTkzNzUgLTIuMTQwNjI1IEwgMS44NTkzNzUgLTQuOTM3NSBDIDEuODU5Mzc1IC01LjYwOTM3NSAxLjk1MzEyNSAtNS43MTg3NSAyLjY3MTg3NSAtNS43ODEyNSBMIDIuNjcxODc1IC01Ljk1MzEyNSBMIDAuMTI1IC01Ljk1MzEyNSBMIDAuMTI1IC01Ljc4MTI1IEMgMC44NDM3NSAtNS43MzQzNzUgMC45Mzc1IC01LjY0MDYyNSAwLjkzNzUgLTUuMDMxMjUgTCAwLjkzNzUgLTIuMjM0Mzc1IEMgMC45Mzc1IC0xLjI4MTI1IDEuMTcxODc1IC0wLjY1NjI1IDEuNjcxODc1IC0wLjI4MTI1IEMgMi4wMzEyNSAtMC4wMTU2MjUgMi41MzEyNSAwLjEyNSAzLjE4NzUgMC4xMjUgQyA0LjAxNTYyNSAwLjEyNSA0LjY0MDYyNSAtMC4wOTM3NSA1LjAxNTYyNSAtMC41MzEyNSBDIDUuNDIxODc1IC0wLjk4NDM3NSA1LjUgLTEuNDY4NzUgNS41IC0yLjM0Mzc1IEwgNS41IC00LjY0MDYyNSBDIDUuNSAtNS41IDUuNTkzNzUgLTUuNzE4NzUgNi4zNDM3NSAtNS43ODEyNSBaIE0gNi4zNDM3NSAtNS45NTMxMjUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTQiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSIiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDEtNSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gNS43MzQzNzUgLTIuODc1IEwgNS43MzQzNzUgLTMuNDY4NzUgTCAwLjQzNzUgLTMuNDY4NzUgTCAwLjQzNzUgLTIuODc1IFogTSA1LjczNDM3NSAtMS4wNzgxMjUgTCA1LjczNDM3NSAtMS42NzE4NzUgTCAwLjQzNzUgLTEuNjcxODc1IEwgMC40Mzc1IC0xLjA3ODEyNSBaIE0gNS43MzQzNzUgLTEuMDc4MTI1ICIvPgo8L3N5bWJvbD4KPC9nPgo8L2RlZnM+CjxnIGlkPSJzdXJmYWNlMSI+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI0MyA2MyBMIDMzMyA2MyBMIDMzMyA5OSBMIDI0MyA5OSBaIE0gMjQzIDYzICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTkzLC02MikiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjYxIDcyIEwgMzUxIDcyIEwgMzUxIDEwOCBMIDI2MSAxMDggWiBNIDI2MSA3MiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTE5MywtNjIpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigzOS45OTkzOSUsNzQuOTAwODE4JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjYxIDk5IEwgMzMzIDk5IEwgMzMzIDcyIEwgMjYxIDcyIFogTSAyNjEgOTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xOTMsLTYyKSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTEiIHg9Ijg2IiB5PSIyNyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0yIiB4PSI5NSIgeT0iMjciLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMyIgeD0iMTA0IiB5PSIyNyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC00IiB4PSIxMTMiIHk9IjI3Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0xIiB4PSI2LjE3IiB5PSI1Ny4xODAzMyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0yIiB4PSI5LjE2NyIgeT0iNTcuMTgwMzMiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMyIgeD0iMTMuNjY3IiB5PSI1Ny4xODAzMyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS00IiB4PSIyMC4xNjUiIHk9IjU3LjE4MDMzIi8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTQiIHg9IjIyLjQxNSIgeT0iNTcuMTgwMzMiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtNSIgeD0iMjQuNjY1IiB5PSI1Ny4xODAzMyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS00IiB4PSIzMC44MyIgeT0iNTcuMTgwMzMiLz4KPC9nPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMzkuOTk5MzklLDc0LjkwMDgxOCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI2MSAxNjIgTCAyNjEgMTcxIEwgMzUxIDE3MSBMIDM1MSAxMzUgTCAzMzMgMTM1IEwgMzMzIDEyNiBMIDI0MyAxMjYgTCAyNDMgMTYyIFogTSAyNjEgMTYyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTkzLC02MikiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0xIiB4PSI4NiIgeT0iOTAiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNSIgeD0iOTUiIHk9IjkwIi8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTMiIHg9IjEwNCIgeT0iOTAiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNCIgeD0iMTEzIiB5PSI5MCIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIzNCAxMTcgTCAzNjAgMTE3ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTkzLC02MikiLz4KPC9nPgo8L3N2Zz4K"]}},"cell_type":"markdown","metadata":{"graffitiCellId":"id_0gx2u7a","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"219EF652C7BC4B84804B9055F9FAA551","mdEditEnable":false},"source":"我们刚刚提到某个锚框较好地覆盖了图像中的狗。如果该目标的真实边界框已知，这里的“较好”该如何量化呢？一种直观的方法是衡量锚框和真实边界框之间的相似度。我们知道，Jaccard系数（Jaccard index）可以衡量两个集合的相似度。给定集合$\\mathcal{A}$和$\\mathcal{B}$，它们的Jaccard系数即二者交集大小除以二者并集大小：\n\n$$\nJ(\\mathcal{A},\\mathcal{B}) = \\frac{\\left|\\mathcal{A} \\cap \\mathcal{B}\\right|}{\\left| \\mathcal{A} \\cup \\mathcal{B}\\right|}.\n$$\n\n\n实际上，我们可以把边界框内的像素区域看成是像素的集合。如此一来，我们可以用两个边界框的像素集合的Jaccard系数衡量这两个边界框的相似度。当衡量两个边界框的相似度时，我们通常将Jaccard系数称为交并比（Intersection over Union，IoU），即两个边界框相交面积与相并面积之比，如图9.2所示。交并比的取值范围在0和1之间：0表示两个边界框无重合像素，1表示两个边界框相等。\n\n\n![Image Name](https://cdn.kesci.com/upload/image/q5vs9jkw9f.png?imageView2/0/w/640/h/640)\n"},{"cell_type":"code","execution_count":16,"metadata":{"graffitiCellId":"id_cyce0zq","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"D762F50137C345EB8B18418E11F9198C","collapsed":false,"scrolled":false},"outputs":[],"source":"# 以下函数已保存在d2lzh_pytorch包中方便以后使用\ndef compute_intersection(set_1, set_2):\n    \"\"\"\n    计算anchor之间的交集\n    Args:\n        set_1: a tensor of dimensions (n1, 4), anchor表示成(xmin, ymin, xmax, ymax)\n        set_2: a tensor of dimensions (n2, 4), anchor表示成(xmin, ymin, xmax, ymax)\n    Returns:\n        intersection of each of the boxes in set 1 with respect to each of the boxes in set 2, shape: (n1, n2)\n    \"\"\"\n    # PyTorch auto-broadcasts singleton dimensions\n    lower_bounds = torch.max(set_1[:, :2].unsqueeze(1), set_2[:, :2].unsqueeze(0))  # (n1, n2, 2)\n    upper_bounds = torch.min(set_1[:, 2:].unsqueeze(1), set_2[:, 2:].unsqueeze(0))  # (n1, n2, 2)\n    intersection_dims = torch.clamp(upper_bounds - lower_bounds, min=0)  # (n1, n2, 2)\n    return intersection_dims[:, :, 0] * intersection_dims[:, :, 1]  # (n1, n2)\n\n\ndef compute_jaccard(set_1, set_2):\n    \"\"\"\n    计算anchor之间的Jaccard系数(IoU)\n    Args:\n        set_1: a tensor of dimensions (n1, 4), anchor表示成(xmin, ymin, xmax, ymax)\n        set_2: a tensor of dimensions (n2, 4), anchor表示成(xmin, ymin, xmax, ymax)\n    Returns:\n        Jaccard Overlap of each of the boxes in set 1 with respect to each of the boxes in set 2, shape: (n1, n2)\n    \"\"\"\n    # Find intersections\n    intersection = compute_intersection(set_1, set_2)  # (n1, n2)\n\n    # Find areas of each box in both sets\n    areas_set_1 = (set_1[:, 2] - set_1[:, 0]) * (set_1[:, 3] - set_1[:, 1])  # (n1)\n    areas_set_2 = (set_2[:, 2] - set_2[:, 0]) * (set_2[:, 3] - set_2[:, 1])  # (n2)\n\n    # Find the union\n    # PyTorch auto-broadcasts singleton dimensions\n    union = areas_set_1.unsqueeze(1) + areas_set_2.unsqueeze(0) - intersection  # (n1, n2)\n\n    return intersection / union  # (n1, n2)"},{"attachments":{"9.4_anchor-label.svg":{"image/svg+xml":["PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzQ5cHQiIGhlaWdodD0iMjQ2cHQiIHZpZXdCb3g9IjAgMCAzNDkgMjQ2IiB2ZXJzaW9uPSIxLjEiPgo8ZGVmcz4KPGc+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9IiIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC0xIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA0LjAxNTYyNSAtNi4xNTYyNSBDIDIuNzY1NjI1IC02LjAxNTYyNSAyLjA2MjUgLTUuODEyNSAxLjI4MTI1IC01IEMgMC42NDA2MjUgLTQuMzQzNzUgMC4zMTI1IC0zLjQ4NDM3NSAwLjMxMjUgLTIuNTE1NjI1IEMgMC4zMTI1IC0xLjg3NSAwLjQ4NDM3NSAtMS4yMzQzNzUgMC43MzQzNzUgLTAuNzgxMjUgQyAxLjA0Njg3NSAtMC4yMDMxMjUgMS42MDkzNzUgMC4xMjUgMi4zMjgxMjUgMC4xMjUgQyAyLjkyMTg3NSAwLjEyNSAzLjQyMTg3NSAtMC4xMDkzNzUgMy43NSAtMC41MzEyNSBDIDQuMDQ2ODc1IC0wLjg5MDYyNSA0LjIxODc1IC0xLjM5MDYyNSA0LjIxODc1IC0xLjk2ODc1IEMgNC4yMTg3NSAtMy4xMjUgMy41NjI1IC0zLjg1OTM3NSAyLjUxNTYyNSAtMy44NTkzNzUgQyAyLjEwOTM3NSAtMy44NTkzNzUgMS44MTI1IC0zLjc4MTI1IDEuMzc1IC0zLjQ1MzEyNSBDIDEuNjA5Mzc1IC00LjgxMjUgMi42MjUgLTUuNzgxMjUgNC4wMzEyNSAtNi4wMTU2MjUgWiBNIDMuNDA2MjUgLTEuNjg3NSBDIDMuNDA2MjUgLTAuNzgxMjUgMy4wNjI1IC0wLjEyNSAyLjQyMTg3NSAtMC4xMjUgQyAxLjU3ODEyNSAtMC4xMjUgMS4xNDA2MjUgLTEuMDMxMjUgMS4xNDA2MjUgLTIuMzkwNjI1IEMgMS4xNDA2MjUgLTMuMjE4NzUgMS42NzE4NzUgLTMuNDM3NSAyLjE4NzUgLTMuNDM3NSBDIDMuMDMxMjUgLTMuNDM3NSAzLjQwNjI1IC0yLjg0Mzc1IDMuNDA2MjUgLTEuNjg3NSBaIE0gMy40MDYyNSAtMS42ODc1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC0yIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA0LjA0Njg3NSAtNS44MTI1IEwgNC4wNDY4NzUgLTUuOTUzMTI1IEwgMC43MTg3NSAtNS45NTMxMjUgTCAwLjE4NzUgLTQuNjQwNjI1IEwgMC4zNDM3NSAtNC41NDY4NzUgQyAwLjcxODc1IC01LjE3MTg3NSAwLjg3NSAtNS4yOTY4NzUgMS4zOTA2MjUgLTUuMjk2ODc1IEwgMy4zMjgxMjUgLTUuMjk2ODc1IEwgMS41NDY4NzUgMC4wNzgxMjUgTCAyLjE0MDYyNSAwLjA3ODEyNSBaIE0gNC4wNDY4NzUgLTUuODEyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtMyI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gNCAtMS4zOTA2MjUgQyA0IC0yLjEwOTM3NSAzLjcxODc1IC0yLjU5Mzc1IDIuNjA5Mzc1IC0zLjM0Mzc1IEMgMy41IC0zLjgxMjUgMy44MTI1IC00LjEyNSAzLjgxMjUgLTQuNzk2ODc1IEMgMy44MTI1IC01LjUgMy4xODc1IC02LjA3ODEyNSAyLjI5Njg3NSAtNi4wNzgxMjUgQyAxLjMxMjUgLTYuMDc4MTI1IDAuNTYyNSAtNS41NDY4NzUgMC41NjI1IC00LjY4NzUgQyAwLjU2MjUgLTQuMDkzNzUgMC43NSAtMy43NSAxLjY3MTg3NSAtMi45ODQzNzUgQyAwLjcxODc1IC0yLjMxMjUgMC41IC0xLjk2ODc1IDAuNSAtMS4zNDM3NSBDIDAuNSAtMC41IDEuMjE4NzUgMC4xMjUgMi4yMzQzNzUgMC4xMjUgQyAzLjMxMjUgMC4xMjUgNCAtMC40Njg3NSA0IC0xLjM5MDYyNSBaIE0gMy4xODc1IC00Ljc5Njg3NSBDIDMuMTg3NSAtNC4yMzQzNzUgMi45Njg3NSAtMy44NTkzNzUgMi4zNDM3NSAtMy41IEMgMS41NjI1IC0zLjk2ODc1IDEuMjE4NzUgLTQuMzkwNjI1IDEuMjE4NzUgLTQuOTM3NSBDIDEuMjE4NzUgLTUuNSAxLjYwOTM3NSAtNS44MjgxMjUgMi4yMTg3NSAtNS44MjgxMjUgQyAyLjgyODEyNSAtNS44MjgxMjUgMy4xODc1IC01LjQyMTg3NSAzLjE4NzUgLTQuNzk2ODc1IFogTSAyLjQzNzUgLTIuNDUzMTI1IEMgMy4wNDY4NzUgLTIuMDMxMjUgMy4zMjgxMjUgLTEuNjcxODc1IDMuMzI4MTI1IC0xLjEwOTM3NSBDIDMuMzI4MTI1IC0wLjUzMTI1IDIuOTIxODc1IC0wLjEyNSAyLjMyODEyNSAtMC4xMjUgQyAxLjY0MDYyNSAtMC4xMjUgMS4xODc1IC0wLjU5Mzc1IDEuMTg3NSAtMS40MjE4NzUgQyAxLjE4NzUgLTIgMS4zNzUgLTIuMzc1IDEuOTA2MjUgLTIuODEyNSBaIE0gMi40Mzc1IC0yLjQ1MzEyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtNCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMC41MzEyNSAwLjIwMzEyNSBDIDEuNzAzMTI1IDAuMDMxMjUgMi4yODEyNSAtMC4xODc1IDMuMDQ2ODc1IC0wLjg3NSBDIDMuNzY1NjI1IC0xLjUzMTI1IDQuMTI1IC0yLjUxNTYyNSA0LjEyNSAtMy41NDY4NzUgQyA0LjEyNSAtNC4yOTY4NzUgMy45MjE4NzUgLTQuOTUzMTI1IDMuNTYyNSAtNS40MDYyNSBDIDMuMjAzMTI1IC01LjgyODEyNSAyLjcxODc1IC02LjA3ODEyNSAyLjE0MDYyNSAtNi4wNzgxMjUgQyAxLjA3ODEyNSAtNi4wNzgxMjUgMC4yNjU2MjUgLTUuMTcxODc1IDAuMjY1NjI1IC0zLjk1MzEyNSBDIDAuMjY1NjI1IC0yLjg1OTM3NSAwLjkyMTg3NSAtMi4xNDA2MjUgMS44OTA2MjUgLTIuMTQwNjI1IEMgMi40MjE4NzUgLTIuMTQwNjI1IDIuODU5Mzc1IC0yLjI2NTYyNSAzLjIzNDM3NSAtMi42NDA2MjUgQyAyLjg3NSAtMS4xNzE4NzUgMS44NzUgLTAuMjE4NzUgMC41IDAuMDE1NjI1IFogTSAzLjI2NTYyNSAtMy4xODc1IEMgMy4yNjU2MjUgLTIuNzE4NzUgMi41OTM3NSAtMi41MTU2MjUgMi4yMDMxMjUgLTIuNTE1NjI1IEMgMS41MzEyNSAtMi41MTU2MjUgMS4wOTM3NSAtMy4xODc1IDEuMDkzNzUgLTQuMjY1NjI1IEMgMS4wOTM3NSAtNC43NSAxLjIzNDM3NSAtNS4yODEyNSAxLjQwNjI1IC01LjUzMTI1IEMgMS41NjI1IC01LjcxODc1IDEuNzk2ODc1IC01LjgyODEyNSAyLjA2MjUgLTUuODI4MTI1IEMgMi44NTkzNzUgLTUuODI4MTI1IDMuMjY1NjI1IC01LjA2MjUgMy4yNjU2MjUgLTMuNTQ2ODc1IFogTSAzLjI2NTYyNSAtMy4xODc1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMC01Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSA0LjI1IC0xLjUgTCA0LjI1IC0yLjA3ODEyNSBMIDMuMzI4MTI1IC0yLjA3ODEyNSBMIDMuMzI4MTI1IC02LjA3ODEyNSBMIDIuOTM3NSAtNi4wNzgxMjUgTCAwLjEwOTM3NSAtMi4wNzgxMjUgTCAwLjEwOTM3NSAtMS41IEwgMi42MjUgLTEuNSBMIDIuNjI1IDAgTCAzLjMyODEyNSAwIEwgMy4zMjgxMjUgLTEuNSBaIE0gMi42MjUgLTIuMDc4MTI1IEwgMC40Njg3NSAtMi4wNzgxMjUgTCAyLjYyNSAtNS4xNzE4NzUgWiBNIDIuNjI1IC0yLjA3ODEyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtNiI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMy45Mzc1IC02LjEyNSBMIDMuODU5Mzc1IC02LjE4NzUgQyAzLjcxODc1IC02IDMuNjQwNjI1IC01Ljk1MzEyNSAzLjQyMTg3NSAtNS45NTMxMjUgTCAxLjU2MjUgLTUuOTUzMTI1IEwgMC41NzgxMjUgLTMuODI4MTI1IEMgMC41NzgxMjUgLTMuODI4MTI1IDAuNTc4MTI1IC0zLjc5Njg3NSAwLjU3ODEyNSAtMy43ODEyNSBDIDAuNTc4MTI1IC0zLjcxODc1IDAuNjA5Mzc1IC0zLjcwMzEyNSAwLjY4NzUgLTMuNzAzMTI1IEMgMS41NDY4NzUgLTMuNzAzMTI1IDIuMTcxODc1IC0zLjQyMTg3NSAyLjU5Mzc1IC0zLjA3ODEyNSBDIDMgLTIuNzUgMy4yMDMxMjUgLTIuMjk2ODc1IDMuMjAzMTI1IC0xLjczNDM3NSBDIDMuMjAzMTI1IC0wLjk1MzEyNSAyLjYyNSAtMC4yMDMxMjUgMS45ODQzNzUgLTAuMjAzMTI1IEMgMS44MTI1IC0wLjIwMzEyNSAxLjYwOTM3NSAtMC4yODEyNSAxLjM0Mzc1IC0wLjUgQyAxLjA2MjUgLTAuNzM0Mzc1IDAuODkwNjI1IC0wLjc4MTI1IDAuNjg3NSAtMC43ODEyNSBDIDAuNDM3NSAtMC43ODEyNSAwLjI4MTI1IC0wLjY1NjI1IDAuMjgxMjUgLTAuNDM3NSBDIDAuMjgxMjUgLTAuMDkzNzUgMC43NSAwLjEyNSAxLjQyMTg3NSAwLjEyNSBDIDIuMDMxMjUgMC4xMjUgMi41MzEyNSAtMC4wMTU2MjUgMi45NTMxMjUgLTAuMzEyNSBDIDMuNTYyNSAtMC43NjU2MjUgMy44MjgxMjUgLTEuMzI4MTI1IDMuODI4MTI1IC0yLjE4NzUgQyAzLjgyODEyNSAtMi42NTYyNSAzLjc1IC0zIDMuNTE1NjI1IC0zLjMyODEyNSBDIDMgLTQuMDQ2ODc1IDIuNTYyNSAtNC4yMzQzNzUgMS4yNjU2MjUgLTQuNDg0Mzc1IEwgMS42MjUgLTUuMjUgTCAzLjM3NSAtNS4yNSBDIDMuNTE1NjI1IC01LjI1IDMuNTkzNzUgLTUuMjk2ODc1IDMuNjI1IC01LjM1OTM3NSBaIE0gMy45Mzc1IC02LjEyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtNyI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMy41NDY4NzUgMCBMIDMuNTQ2ODc1IC0wLjE0MDYyNSBDIDIuODc1IC0wLjE0MDYyNSAyLjY4NzUgLTAuMjk2ODc1IDIuNjg3NSAtMC42ODc1IEwgMi42ODc1IC02LjA2MjUgTCAyLjYwOTM3NSAtNi4wNzgxMjUgTCAxIC01LjI2NTYyNSBMIDEgLTUuMTQwNjI1IEwgMS4yMzQzNzUgLTUuMjM0Mzc1IEMgMS40MDYyNSAtNS4yOTY4NzUgMS41NjI1IC01LjM0Mzc1IDEuNjQwNjI1IC01LjM0Mzc1IEMgMS44NDM3NSAtNS4zNDM3NSAxLjkyMTg3NSAtNS4yMDMxMjUgMS45MjE4NzUgLTQuODkwNjI1IEwgMS45MjE4NzUgLTAuODU5Mzc1IEMgMS45MjE4NzUgLTAuMzU5Mzc1IDEuNzM0Mzc1IC0wLjE3MTg3NSAxLjA2MjUgLTAuMTQwNjI1IEwgMS4wNjI1IDAgWiBNIDMuNTQ2ODc1IDAgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgwLTgiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDAuNTQ2ODc1IC00LjU5Mzc1IEMgMC45MjE4NzUgLTUuMjUgMS4zMjgxMjUgLTUuNTQ2ODc1IDEuODkwNjI1IC01LjU0Njg3NSBDIDIuNDg0Mzc1IC01LjU0Njg3NSAyLjg1OTM3NSAtNS4yMzQzNzUgMi44NTkzNzUgLTQuNjI1IEMgMi44NTkzNzUgLTQuMDc4MTI1IDIuNTc4MTI1IC0zLjY3MTg3NSAyLjE0MDYyNSAtMy40MjE4NzUgQyAxLjk1MzEyNSAtMy4zMTI1IDEuNzE4NzUgLTMuMjE4NzUgMS4zNzUgLTMuMDkzNzUgTCAxLjM3NSAtMi45Njg3NSBDIDEuODkwNjI1IC0yLjk2ODc1IDIuMDkzNzUgLTIuOTM3NSAyLjI5Njg3NSAtMi44NzUgQyAyLjkyMTg3NSAtMi43MDMxMjUgMy4yMzQzNzUgLTIuMjY1NjI1IDMuMjM0Mzc1IC0xLjU3ODEyNSBDIDMuMjM0Mzc1IC0wLjgxMjUgMi43MzQzNzUgLTAuMjAzMTI1IDIuMDYyNSAtMC4yMDMxMjUgQyAxLjgxMjUgLTAuMjAzMTI1IDEuNjI1IC0wLjI1IDEuMjgxMjUgLTAuNDg0Mzc1IEMgMS4wMzEyNSAtMC42NTYyNSAwLjg5MDYyNSAtMC43MTg3NSAwLjczNDM3NSAtMC43MTg3NSBDIDAuNTMxMjUgLTAuNzE4NzUgMC4zNzUgLTAuNTc4MTI1IDAuMzc1IC0wLjM5MDYyNSBDIDAuMzc1IC0wLjA2MjUgMC43MTg3NSAwLjEyNSAxLjM3NSAwLjEyNSBDIDIuMTcxODc1IDAuMTI1IDMuMDMxMjUgLTAuMTQwNjI1IDMuNDY4NzUgLTAuNzE4NzUgQyAzLjcxODc1IC0xLjA0Njg3NSAzLjg3NSAtMS41IDMuODc1IC0xLjk2ODc1IEMgMy44NzUgLTIuNDM3NSAzLjczNDM3NSAtMi44NTkzNzUgMy40ODQzNzUgLTMuMTI1IEMgMy4yOTY4NzUgLTMuMzI4MTI1IDMuMTI1IC0zLjQzNzUgMi43MzQzNzUgLTMuNjA5Mzc1IEMgMy4zNDM3NSAtMy45Njg3NSAzLjU3ODEyNSAtNC40MjE4NzUgMy41NzgxMjUgLTQuODQzNzUgQyAzLjU3ODEyNSAtNS41OTM3NSAzIC02LjA3ODEyNSAyLjE3MTg3NSAtNi4wNzgxMjUgQyAxLjIzNDM3NSAtNi4wNzgxMjUgMC42NzE4NzUgLTUuNDg0Mzc1IDAuNDA2MjUgLTQuNjI1IFogTSAwLjU0Njg3NSAtNC41OTM3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDAtOSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gNC4yNjU2MjUgLTEuMjM0Mzc1IEwgNC4xNDA2MjUgLTEuMjgxMjUgQyAzLjg0Mzc1IC0wLjc4MTI1IDMuNjU2MjUgLTAuNjg3NSAzLjI4MTI1IC0wLjY4NzUgTCAxLjE3MTg3NSAtMC42ODc1IEwgMi42NTYyNSAtMi4yNjU2MjUgQyAzLjQ1MzEyNSAtMy4xMDkzNzUgMy44MTI1IC0zLjc4MTI1IDMuODEyNSAtNC41IEMgMy44MTI1IC01LjM5MDYyNSAzLjE1NjI1IC02LjA3ODEyNSAyLjE0MDYyNSAtNi4wNzgxMjUgQyAxLjAzMTI1IC02LjA3ODEyNSAwLjQ1MzEyNSAtNS4zNDM3NSAwLjI2NTYyNSAtNC4yOTY4NzUgTCAwLjQ1MzEyNSAtNC4yNSBDIDAuODEyNSAtNS4xMjUgMS4xNDA2MjUgLTUuNDIxODc1IDEuNzgxMjUgLTUuNDIxODc1IEMgMi41NDY4NzUgLTUuNDIxODc1IDMuMDMxMjUgLTQuOTY4NzUgMy4wMzEyNSAtNC4xNTYyNSBDIDMuMDMxMjUgLTMuMzkwNjI1IDIuNzAzMTI1IC0yLjcwMzEyNSAxLjg1OTM3NSAtMS44MTI1IEwgMC4yNjU2MjUgLTAuMTA5Mzc1IEwgMC4yNjU2MjUgMCBMIDMuNzgxMjUgMCBaIE0gNC4yNjU2MjUgLTEuMjM0Mzc1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMS0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgxLTEiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDIuMTg3NSAtMy4xODc1IEMgMi4wNjI1IC0zLjgxMjUgMS45NTMxMjUgLTMuOTY4NzUgMS43MzQzNzUgLTMuOTY4NzUgQyAxLjUxNTYyNSAtMy45Njg3NSAxLjIxODc1IC0zLjkwNjI1IDAuNjcxODc1IC0zLjcwMzEyNSBMIDAuNTc4MTI1IC0zLjY3MTg3NSBMIDAuNjA5Mzc1IC0zLjUzMTI1IEwgMC43NjU2MjUgLTMuNTc4MTI1IEMgMC45Mzc1IC0zLjYyNSAxLjA0Njg3NSAtMy42NDA2MjUgMS4xMDkzNzUgLTMuNjQwNjI1IEMgMS4zNDM3NSAtMy42NDA2MjUgMS40MDYyNSAtMy41NjI1IDEuNTMxMjUgLTMuMDMxMjUgTCAxLjc4MTI1IC0xLjkwNjI1IEwgMS4wNDY4NzUgLTAuODU5Mzc1IEMgMC44NTkzNzUgLTAuNTkzNzUgMC42ODc1IC0wLjQyMTg3NSAwLjU3ODEyNSAtMC40MjE4NzUgQyAwLjUzMTI1IC0wLjQyMTg3NSAwLjQzNzUgLTAuNDUzMTI1IDAuMzQzNzUgLTAuNSBDIDAuMjM0Mzc1IC0wLjU2MjUgMC4xNDA2MjUgLTAuNjA5Mzc1IDAuMDYyNSAtMC42MDkzNzUgQyAtMC4xMDkzNzUgLTAuNjA5Mzc1IC0wLjI1IC0wLjQ1MzEyNSAtMC4yNSAtMC4yODEyNSBDIC0wLjI1IC0wLjA0Njg3NSAtMC4wNzgxMjUgMC4wOTM3NSAwLjIwMzEyNSAwLjA5Mzc1IEMgMC40ODQzNzUgMC4wOTM3NSAwLjY3MTg3NSAwLjAxNTYyNSAxLjA2MjUgLTAuNTE1NjI1IEwgMS44NTkzNzUgLTEuNTc4MTI1IEwgMi4xMDkzNzUgLTAuNTE1NjI1IEMgMi4yMTg3NSAtMC4wNjI1IDIuMzU5Mzc1IDAuMDkzNzUgMi42NDA2MjUgMC4wOTM3NSBDIDIuOTg0Mzc1IDAuMDkzNzUgMy4yMTg3NSAtMC4xMDkzNzUgMy43NSAtMC45MjE4NzUgTCAzLjYwOTM3NSAtMS4wMTU2MjUgQyAzLjUzMTI1IC0wLjkyMTg3NSAzLjUgLTAuODU5Mzc1IDMuNDIxODc1IC0wLjc1IEMgMy4yMTg3NSAtMC40ODQzNzUgMy4xMDkzNzUgLTAuMzkwNjI1IDMgLTAuMzkwNjI1IEMgMi44NzUgLTAuMzkwNjI1IDIuNzk2ODc1IC0wLjUxNTYyNSAyLjczNDM3NSAtMC43NjU2MjUgTCAyLjQzNzUgLTEuOTY4NzUgQyAyLjM5MDYyNSAtMi4xODc1IDIuMzU5Mzc1IC0yLjMxMjUgMi4zNTkzNzUgLTIuMzc1IEMgMi43NjU2MjUgLTMuMDYyNSAzLjA5Mzc1IC0zLjQ2ODc1IDMuMjUgLTMuNDY4NzUgQyAzLjQ2ODc1IC0zLjQ2ODc1IDMuNTQ2ODc1IC0zLjMxMjUgMy43MTg3NSAtMy4zMTI1IEMgMy44OTA2MjUgLTMuMzEyNSA0LjAxNTYyNSAtMy40NTMxMjUgNC4wMTU2MjUgLTMuNjQwNjI1IEMgNC4wMTU2MjUgLTMuODI4MTI1IDMuODc1IC0zLjk2ODc1IDMuNjU2MjUgLTMuOTY4NzUgQyAzLjI2NTYyNSAtMy45Njg3NSAyLjkyMTg3NSAtMy42NDA2MjUgMi4yOTY4NzUgLTIuNjg3NSBaIE0gMi4xODc1IC0zLjE4NzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgyLTAiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSIiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDItMSI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMi44NDM3NSAtMC44MjgxMjUgTCAyLjc2NTYyNSAtMC44NTkzNzUgQyAyLjU2MjUgLTAuNTE1NjI1IDIuNDM3NSAtMC40NTMxMjUgMi4xODc1IC0wLjQ1MzEyNSBMIDAuNzgxMjUgLTAuNDUzMTI1IEwgMS43NjU2MjUgLTEuNTE1NjI1IEMgMi4yOTY4NzUgLTIuMDc4MTI1IDIuNTMxMjUgLTIuNTMxMjUgMi41MzEyNSAtMyBDIDIuNTMxMjUgLTMuNTkzNzUgMi4xMDkzNzUgLTQuMDYyNSAxLjQyMTg3NSAtNC4wNjI1IEMgMC42ODc1IC00LjA2MjUgMC4zMTI1IC0zLjU2MjUgMC4xODc1IC0yLjg1OTM3NSBMIDAuMzEyNSAtMi44MjgxMjUgQyAwLjU0Njg3NSAtMy40MjE4NzUgMC43NSAtMy42MDkzNzUgMS4xODc1IC0zLjYwOTM3NSBDIDEuNzAzMTI1IC0zLjYwOTM3NSAyLjAxNTYyNSAtMy4zMTI1IDIuMDE1NjI1IC0yLjc2NTYyNSBDIDIuMDE1NjI1IC0yLjI1IDEuODEyNSAtMS43OTY4NzUgMS4yMzQzNzUgLTEuMjAzMTI1IEwgMC4xNzE4NzUgLTAuMDc4MTI1IEwgMC4xNzE4NzUgMCBMIDIuNTE1NjI1IDAgWiBNIDIuODQzNzUgLTAuODI4MTI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMi0yIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAwLjM1OTM3NSAtMy4wNjI1IEMgMC42MDkzNzUgLTMuNSAwLjg5MDYyNSAtMy43MDMxMjUgMS4yNjU2MjUgLTMuNzAzMTI1IEMgMS42NTYyNSAtMy43MDMxMjUgMS45MDYyNSAtMy40ODQzNzUgMS45MDYyNSAtMy4wNzgxMjUgQyAxLjkwNjI1IC0yLjcxODc1IDEuNzE4NzUgLTIuNDUzMTI1IDEuNDIxODc1IC0yLjI4MTI1IEMgMS4yOTY4NzUgLTIuMjAzMTI1IDEuMTQwNjI1IC0yLjE0MDYyNSAwLjkyMTg3NSAtMi4wNjI1IEwgMC45MjE4NzUgLTEuOTg0Mzc1IEMgMS4yNjU2MjUgLTEuOTg0Mzc1IDEuMzkwNjI1IC0xLjk2ODc1IDEuNTMxMjUgLTEuOTIxODc1IEMgMS45Mzc1IC0xLjc5Njg3NSAyLjE1NjI1IC0xLjUgMi4xNTYyNSAtMS4wNDY4NzUgQyAyLjE1NjI1IC0wLjU0Njg3NSAxLjgxMjUgLTAuMTI1IDEuMzc1IC0wLjEyNSBDIDEuMjAzMTI1IC0wLjEyNSAxLjA3ODEyNSAtMC4xNTYyNSAwLjg1OTM3NSAtMC4zMTI1IEMgMC42ODc1IC0wLjQzNzUgMC41OTM3NSAtMC40Njg3NSAwLjQ4NDM3NSAtMC40Njg3NSBDIDAuMzU5Mzc1IC0wLjQ2ODc1IDAuMjUgLTAuMzkwNjI1IDAuMjUgLTAuMjY1NjI1IEMgMC4yNSAtMC4wNDY4NzUgMC40ODQzNzUgMC4wNzgxMjUgMC45MjE4NzUgMC4wNzgxMjUgQyAxLjQ1MzEyNSAwLjA3ODEyNSAyLjAxNTYyNSAtMC4wOTM3NSAyLjMxMjUgLTAuNDY4NzUgQyAyLjQ4NDM3NSAtMC43MDMxMjUgMi41OTM3NSAtMSAyLjU5Mzc1IC0xLjMxMjUgQyAyLjU5Mzc1IC0xLjYyNSAyLjQ4NDM3NSAtMS45MDYyNSAyLjMyODEyNSAtMi4wOTM3NSBDIDIuMjAzMTI1IC0yLjIxODc1IDIuMDkzNzUgLTIuMjk2ODc1IDEuODI4MTI1IC0yLjQwNjI1IEMgMi4yMTg3NSAtMi42NDA2MjUgMi4zNzUgLTIuOTUzMTI1IDIuMzc1IC0zLjIzNDM3NSBDIDIuMzc1IC0zLjcxODc1IDIgLTQuMDYyNSAxLjQ1MzEyNSAtNC4wNjI1IEMgMC44MjgxMjUgLTQuMDYyNSAwLjQzNzUgLTMuNjU2MjUgMC4yNjU2MjUgLTMuMDc4MTI1IFogTSAwLjM1OTM3NSAtMy4wNjI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMi0zIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAyLjY4NzUgLTMuODc1IEwgMi42ODc1IC0zLjk2ODc1IEwgMC40ODQzNzUgLTMuOTY4NzUgTCAwLjEyNSAtMy4wOTM3NSBMIDAuMjM0Mzc1IC0zLjAzMTI1IEMgMC40ODQzNzUgLTMuNDM3NSAwLjU3ODEyNSAtMy41MzEyNSAwLjkzNzUgLTMuNTMxMjUgTCAyLjIxODc1IC0zLjUzMTI1IEwgMS4wMzEyNSAwLjA0Njg3NSBMIDEuNDIxODc1IDAuMDQ2ODc1IFogTSAyLjY4NzUgLTMuODc1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMi00Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAyLjM1OTM3NSAwIEwgMi4zNTkzNzUgLTAuMDkzNzUgQyAxLjkwNjI1IC0wLjA5Mzc1IDEuNzk2ODc1IC0wLjIwMzEyNSAxLjc5Njg3NSAtMC40NTMxMjUgTCAxLjc5Njg3NSAtNC4wMzEyNSBMIDEuNzM0Mzc1IC00LjA2MjUgTCAwLjY3MTg3NSAtMy41MTU2MjUgTCAwLjY3MTg3NSAtMy40MjE4NzUgTCAwLjgyODEyNSAtMy40ODQzNzUgQyAwLjkzNzUgLTMuNTMxMjUgMS4wMzEyNSAtMy41NjI1IDEuMDkzNzUgLTMuNTYyNSBDIDEuMjE4NzUgLTMuNTYyNSAxLjI4MTI1IC0zLjQ2ODc1IDEuMjgxMjUgLTMuMjY1NjI1IEwgMS4yODEyNSAtMC41NjI1IEMgMS4yODEyNSAtMC4yMzQzNzUgMS4xNTYyNSAtMC4xMDkzNzUgMC43MDMxMjUgLTAuMDkzNzUgTCAwLjcwMzEyNSAwIFogTSAyLjM1OTM3NSAwICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMi01Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAyLjYyNSAtNC4wOTM3NSBMIDIuNTc4MTI1IC00LjEyNSBDIDIuNDg0Mzc1IC00IDIuNDIxODc1IC0zLjk2ODc1IDIuMjgxMjUgLTMuOTY4NzUgTCAxLjA0Njg3NSAtMy45Njg3NSBMIDAuMzkwNjI1IC0yLjU0Njg3NSBDIDAuMzkwNjI1IC0yLjU0Njg3NSAwLjM5MDYyNSAtMi41MzEyNSAwLjM5MDYyNSAtMi41MTU2MjUgQyAwLjM5MDYyNSAtMi40ODQzNzUgMC40MDYyNSAtMi40Njg3NSAwLjQ1MzEyNSAtMi40Njg3NSBDIDEuMDMxMjUgLTIuNDY4NzUgMS40NTMxMjUgLTIuMjgxMjUgMS43MzQzNzUgLTIuMDQ2ODc1IEMgMiAtMS44NDM3NSAyLjE0MDYyNSAtMS41MzEyNSAyLjE0MDYyNSAtMS4xNTYyNSBDIDIuMTQwNjI1IC0wLjY0MDYyNSAxLjc1IC0wLjE0MDYyNSAxLjMyODEyNSAtMC4xNDA2MjUgQyAxLjIwMzEyNSAtMC4xNDA2MjUgMS4wNjI1IC0wLjE4NzUgMC45MDYyNSAtMC4zMjgxMjUgQyAwLjcwMzEyNSAtMC40ODQzNzUgMC41OTM3NSAtMC41MTU2MjUgMC40NTMxMjUgLTAuNTE1NjI1IEMgMC4yODEyNSAtMC41MTU2MjUgMC4xODc1IC0wLjQzNzUgMC4xODc1IC0wLjI4MTI1IEMgMC4xODc1IC0wLjA2MjUgMC41IDAuMDc4MTI1IDAuOTUzMTI1IDAuMDc4MTI1IEMgMS4zNTkzNzUgMC4wNzgxMjUgMS42ODc1IDAgMS45Njg3NSAtMC4yMDMxMjUgQyAyLjM3NSAtMC41MTU2MjUgMi41NjI1IC0wLjg3NSAyLjU2MjUgLTEuNDUzMTI1IEMgMi41NjI1IC0xLjc4MTI1IDIuNSAtMiAyLjM0Mzc1IC0yLjIxODc1IEMgMiAtMi42ODc1IDEuNzAzMTI1IC0yLjgyODEyNSAwLjg0Mzc1IC0yLjk4NDM3NSBMIDEuMDkzNzUgLTMuNSBMIDIuMjUgLTMuNSBDIDIuMzQzNzUgLTMuNSAyLjM5MDYyNSAtMy41MzEyNSAyLjQwNjI1IC0zLjU3ODEyNSBaIE0gMi42MjUgLTQuMDkzNzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgyLTYiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDIuODQzNzUgLTEgTCAyLjg0Mzc1IC0xLjM5MDYyNSBMIDIuMjE4NzUgLTEuMzkwNjI1IEwgMi4yMTg3NSAtNC4wNjI1IEwgMS45NTMxMjUgLTQuMDYyNSBMIDAuMDc4MTI1IC0xLjM5MDYyNSBMIDAuMDc4MTI1IC0xIEwgMS43NSAtMSBMIDEuNzUgMCBMIDIuMjE4NzUgMCBMIDIuMjE4NzUgLTEgWiBNIDEuNzUgLTEuMzkwNjI1IEwgMC4zMTI1IC0xLjM5MDYyNSBMIDEuNzUgLTMuNDM3NSBaIE0gMS43NSAtMS4zOTA2MjUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgyLTciPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDAuMzU5Mzc1IDAuMTI1IEMgMS4xNDA2MjUgMC4wMzEyNSAxLjUzMTI1IC0wLjEyNSAyLjAzMTI1IC0wLjU3ODEyNSBDIDIuNTE1NjI1IC0xLjAxNTYyNSAyLjc1IC0xLjY3MTg3NSAyLjc1IC0yLjM1OTM3NSBDIDIuNzUgLTIuODc1IDIuNjA5Mzc1IC0zLjI5Njg3NSAyLjM3NSAtMy41OTM3NSBDIDIuMTQwNjI1IC0zLjg5MDYyNSAxLjgxMjUgLTQuMDYyNSAxLjQyMTg3NSAtNC4wNjI1IEMgMC43MTg3NSAtNC4wNjI1IDAuMTg3NSAtMy40NTMxMjUgMC4xODc1IC0yLjY0MDYyNSBDIDAuMTg3NSAtMS45MDYyNSAwLjYwOTM3NSAtMS40MjE4NzUgMS4yNjU2MjUgLTEuNDIxODc1IEMgMS42MDkzNzUgLTEuNDIxODc1IDEuOTA2MjUgLTEuNTE1NjI1IDIuMTU2MjUgLTEuNzY1NjI1IEMgMS45MjE4NzUgLTAuNzgxMjUgMS4yNSAtMC4xNTYyNSAwLjM0Mzc1IDAuMDE1NjI1IFogTSAyLjE3MTg3NSAtMi4xMjUgQyAyLjE3MTg3NSAtMS44MTI1IDEuNzM0Mzc1IC0xLjY4NzUgMS40Njg3NSAtMS42ODc1IEMgMS4wMTU2MjUgLTEuNjg3NSAwLjczNDM3NSAtMi4xMjUgMC43MzQzNzUgLTIuODQzNzUgQyAwLjczNDM3NSAtMy4xNzE4NzUgMC44MjgxMjUgLTMuNTE1NjI1IDAuOTM3NSAtMy42ODc1IEMgMS4wNDY4NzUgLTMuODEyNSAxLjIwMzEyNSAtMy44OTA2MjUgMS4zNzUgLTMuODkwNjI1IEMgMS45MDYyNSAtMy44OTA2MjUgMi4xNzE4NzUgLTMuMzc1IDIuMTcxODc1IC0yLjM1OTM3NSBaIE0gMi4xNzE4NzUgLTIuMTI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMy0wIj4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgzLTEiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDguMjUgLTQuMjUgTCA0LjA0Njg3NSAtNC4yNSBMIDQuMDQ2ODc1IDAuNzk2ODc1IEwgNC42NTYyNSAwLjc5Njg3NSBMIDQuNjU2MjUgMC40MDYyNSBMIDcuNjI1IDAuNDA2MjUgTCA3LjYyNSAwLjc5Njg3NSBMIDguMjUgMC43OTY4NzUgWiBNIDQuNjU2MjUgLTAuMTg3NSBMIDQuNjU2MjUgLTEuNjQwNjI1IEwgNS44NTkzNzUgLTEuNjQwNjI1IEwgNS44NTkzNzUgLTAuMTg3NSBaIE0gNi40Mzc1IC0wLjE4NzUgTCA2LjQzNzUgLTEuNjQwNjI1IEwgNy42MjUgLTEuNjQwNjI1IEwgNy42MjUgLTAuMTg3NSBaIE0gNC42NTYyNSAtMi4yMTg3NSBMIDQuNjU2MjUgLTMuNjU2MjUgTCA1Ljg1OTM3NSAtMy42NTYyNSBMIDUuODU5Mzc1IC0yLjIxODc1IFogTSA2LjQzNzUgLTMuNjU2MjUgTCA3LjYyNSAtMy42NTYyNSBMIDcuNjI1IC0yLjIxODc1IEwgNi40Mzc1IC0yLjIxODc1IFogTSA0LjgyODEyNSAtNy4yNSBMIDQuODI4MTI1IC02LjI2NTYyNSBMIDMuNzAzMTI1IC02LjI2NTYyNSBMIDMuNzAzMTI1IC01LjY1NjI1IEwgNC44MjgxMjUgLTUuNjU2MjUgTCA0LjgyODEyNSAtNC43MDMxMjUgTCA1LjQzNzUgLTQuNzAzMTI1IEwgNS40Mzc1IC01LjY1NjI1IEwgNi43ODEyNSAtNS42NTYyNSBMIDYuNzgxMjUgLTQuNzAzMTI1IEwgNy4zOTA2MjUgLTQuNzAzMTI1IEwgNy4zOTA2MjUgLTUuNjU2MjUgTCA4LjYwOTM3NSAtNS42NTYyNSBMIDguNjA5Mzc1IC02LjI2NTYyNSBMIDcuMzkwNjI1IC02LjI2NTYyNSBMIDcuMzkwNjI1IC03LjI1IEwgNi43ODEyNSAtNy4yNSBMIDYuNzgxMjUgLTYuMjY1NjI1IEwgNS40Mzc1IC02LjI2NTYyNSBMIDUuNDM3NSAtNy4yNSBaIE0gMS41IC03LjMyODEyNSBDIDEuMjk2ODc1IC02LjI1IDAuOTUzMTI1IC01LjI4MTI1IDAuNDg0Mzc1IC00LjM5MDYyNSBMIDEuMDE1NjI1IC00LjA2MjUgQyAxLjI2NTYyNSAtNC41MzEyNSAxLjUgLTUuMDQ2ODc1IDEuNzAzMTI1IC01LjYyNSBMIDMuNDIxODc1IC01LjYyNSBMIDMuNDIxODc1IC02LjI1IEwgMS44OTA2MjUgLTYuMjUgQyAxLjk4NDM3NSAtNi41NDY4NzUgMi4wNjI1IC02Ljg1OTM3NSAyLjE0MDYyNSAtNy4yMDMxMjUgWiBNIDEuMzc1IC00LjUzMTI1IEwgMS4zNzUgLTMuOTUzMTI1IEwgMS44NzUgLTMuOTUzMTI1IEwgMS44NzUgLTIuODI4MTI1IEwgMC43MDMxMjUgLTIuODI4MTI1IEwgMC43MDMxMjUgLTIuMjM0Mzc1IEwgMS44NzUgLTIuMjM0Mzc1IEwgMS44NzUgLTAuMTg3NSBDIDEuODc1IC0wLjA0Njg3NSAxLjc5Njg3NSAwLjA0Njg3NSAxLjY0MDYyNSAwLjEwOTM3NSBMIDEuOTIxODc1IDAuNjcxODc1IEMgMi41OTM3NSAwLjQ1MzEyNSAzLjE4NzUgMC4xNzE4NzUgMy43MTg3NSAtMC4xNTYyNSBMIDMuNTkzNzUgLTAuNzM0Mzc1IEMgMy4yMzQzNzUgLTAuNDg0Mzc1IDIuODc1IC0wLjI4MTI1IDIuNTE1NjI1IC0wLjEyNSBMIDIuNTE1NjI1IC0yLjIzNDM3NSBMIDMuNjQwNjI1IC0yLjIzNDM3NSBMIDMuNjQwNjI1IC0yLjgyODEyNSBMIDIuNTE1NjI1IC0yLjgyODEyNSBMIDIuNTE1NjI1IC0zLjk1MzEyNSBMIDMuNDIxODc1IC0zLjk1MzEyNSBMIDMuNDIxODc1IC00LjUzMTI1IFogTSAxLjM3NSAtNC41MzEyNSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDMtMiI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMi4yODEyNSAtMy43MzQzNzUgQyAyLjUgLTMuMzc1IDIuNzY1NjI1IC0yLjkyMTg3NSAzLjA2MjUgLTIuMzU5Mzc1IEwgMy40MjE4NzUgLTIuODc1IEMgMy4wMzEyNSAtMy40NTMxMjUgMi42NTYyNSAtMy45Njg3NSAyLjI4MTI1IC00LjQyMTg3NSBMIDIuMjgxMjUgLTQuOTY4NzUgTCAzLjIzNDM3NSAtNC45Njg3NSBMIDMuMjM0Mzc1IC01LjU5Mzc1IEwgMi4yODEyNSAtNS41OTM3NSBMIDIuMjgxMjUgLTcuMzU5Mzc1IEwgMS42NDA2MjUgLTcuMzU5Mzc1IEwgMS42NDA2MjUgLTUuNTkzNzUgTCAwLjUgLTUuNTkzNzUgTCAwLjUgLTQuOTY4NzUgTCAxLjYyNSAtNC45Njg3NSBDIDEuMzc1IC0zLjgxMjUgMC45MjE4NzUgLTIuNzgxMjUgMC4zMTI1IC0xLjg3NSBMIDAuNTkzNzUgLTEuMTcxODc1IEMgMS4wMzEyNSAtMS44OTA2MjUgMS4zNzUgLTIuNjg3NSAxLjY0MDYyNSAtMy41NDY4NzUgTCAxLjY0MDYyNSAwLjg3NSBMIDIuMjgxMjUgMC44NzUgWiBNIDQuOTM3NSAtNS41MzEyNSBMIDQuOTM3NSAtNC45NTMxMjUgTCA2LjI2NTYyNSAtNC45NTMxMjUgTCA2LjI2NTYyNSAtMy40ODQzNzUgTCA1LjEyNSAtMy40ODQzNzUgTCA1LjEyNSAtMi45MDYyNSBMIDYuMjY1NjI1IC0yLjkwNjI1IEwgNi4yNjU2MjUgLTEuMjk2ODc1IEwgNC44MjgxMjUgLTEuMjk2ODc1IEwgNC44MjgxMjUgLTAuNzE4NzUgTCA4LjM1OTM3NSAtMC43MTg3NSBMIDguMzU5Mzc1IC0xLjI5Njg3NSBMIDYuODc1IC0xLjI5Njg3NSBMIDYuODc1IC0yLjkwNjI1IEwgOC4wNjI1IC0yLjkwNjI1IEwgOC4wNjI1IC0zLjQ4NDM3NSBMIDYuODc1IC0zLjQ4NDM3NSBMIDYuODc1IC00Ljk1MzEyNSBMIDguMjAzMTI1IC00Ljk1MzEyNSBMIDguMjAzMTI1IC01LjUzMTI1IFogTSAzLjczNDM3NSAtNy4wNDY4NzUgTCAzLjczNDM3NSAwLjY4NzUgTCA4LjY1NjI1IDAuNjg3NSBMIDguNjU2MjUgMC4wNzgxMjUgTCA0LjM1OTM3NSAwLjA3ODEyNSBMIDQuMzU5Mzc1IC02LjQzNzUgTCA4LjQ4NDM3NSAtNi40Mzc1IEwgOC40ODQzNzUgLTcuMDQ2ODc1IFogTSAzLjczNDM3NSAtNy4wNDY4NzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgzLTMiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDEuMTQwNjI1IC02LjY0MDYyNSBMIDEuMTQwNjI1IC02LjA0Njg3NSBMIDQuMTcxODc1IC02LjA0Njg3NSBMIDQuMTcxODc1IC01LjI2NTYyNSBMIDAuNzY1NjI1IC01LjI2NTYyNSBMIDAuNzY1NjI1IC0zLjYyNSBMIDEuMzkwNjI1IC0zLjYyNSBMIDEuMzkwNjI1IC00LjcwMzEyNSBMIDQuMDc4MTI1IC00LjcwMzEyNSBDIDMuNTYyNSAtNC4yNSAzIC0zLjg1OTM3NSAyLjQwNjI1IC0zLjUxNTYyNSBDIDIuMjgxMjUgLTMuNDUzMTI1IDIuMTQwNjI1IC0zLjM5MDYyNSAyIC0zLjM1OTM3NSBMIDIuMTQwNjI1IC0yLjg3NSBDIDIuOTIxODc1IC0yLjg5MDYyNSAzLjYwOTM3NSAtMi45MjE4NzUgNC4yMTg3NSAtMi45Mzc1IEMgMy40MjE4NzUgLTIuNDg0Mzc1IDIuNjcxODc1IC0yLjE1NjI1IDEuOTM3NSAtMS45NTMxMjUgQyAxLjc1IC0xLjk1MzEyNSAxLjU2MjUgLTEuOTY4NzUgMS4zNzUgLTEuOTY4NzUgTCAxLjUgLTEuMzkwNjI1IEMgMi4zMjgxMjUgLTEuNDA2MjUgMy4yMzQzNzUgLTEuNDM3NSA0LjIzNDM3NSAtMS40ODQzNzUgTCA0LjIzNDM3NSAwLjA0Njg3NSBDIDQuMjM0Mzc1IDAuMjM0Mzc1IDQuMTI1IDAuMzI4MTI1IDMuOTIxODc1IDAuMzI4MTI1IEMgMy42ODc1IDAuMzI4MTI1IDMuNDM3NSAwLjMxMjUgMy4xODc1IDAuMjgxMjUgTCAzLjMyODEyNSAwLjg5MDYyNSBMIDQuMTQwNjI1IDAuODkwNjI1IEMgNC42MjUgMC44OTA2MjUgNC44NzUgMC42NTYyNSA0Ljg3NSAwLjIwMzEyNSBMIDQuODc1IC0xLjUxNTYyNSBDIDUuNTMxMjUgLTEuNTQ2ODc1IDYuMjAzMTI1IC0xLjU5Mzc1IDYuOTM3NSAtMS42NDA2MjUgQyA3LjEyNSAtMS40MjE4NzUgNy4yODEyNSAtMS4yMDMxMjUgNy40MjE4NzUgLTAuOTg0Mzc1IEwgNy45MDYyNSAtMS4zNDM3NSBDIDcuNTYyNSAtMS44MjgxMjUgNy4wNjI1IC0yLjM5MDYyNSA2LjQwNjI1IC0zLjAzMTI1IEwgNS45Mzc1IC0yLjczNDM3NSBDIDYuMTQwNjI1IC0yLjUxNTYyNSA2LjM1OTM3NSAtMi4yOTY4NzUgNi41NDY4NzUgLTIuMDkzNzUgQyA1LjM3NSAtMiA0LjIxODc1IC0xLjkzNzUgMy4wNDY4NzUgLTEuOTA2MjUgQyA0LjI4MTI1IC0yLjM0Mzc1IDUuNDA2MjUgLTIuOTM3NSA2LjQ2ODc1IC0zLjczNDM3NSBMIDUuOTUzMTI1IC00LjA5Mzc1IEMgNS42MjUgLTMuODU5Mzc1IDUuMjk2ODc1IC0zLjYyNSA0Ljk4NDM3NSAtMy40MDYyNSBDIDQuNDg0Mzc1IC0zLjM3NSAzLjgxMjUgLTMuMzU5Mzc1IDIuOTg0Mzc1IC0zLjM0Mzc1IEMgMy41NjI1IC0zLjY1NjI1IDQuMTI1IC00LjAxNTYyNSA0LjY1NjI1IC00LjQ1MzEyNSBMIDQuMTcxODc1IC00LjcwMzEyNSBMIDcuNjA5Mzc1IC00LjcwMzEyNSBMIDcuNjA5Mzc1IC0zLjYyNSBMIDguMjM0Mzc1IC0zLjYyNSBMIDguMjM0Mzc1IC01LjI2NTYyNSBMIDQuODI4MTI1IC01LjI2NTYyNSBMIDQuODI4MTI1IC02LjA0Njg3NSBMIDcuODU5Mzc1IC02LjA0Njg3NSBMIDcuODU5Mzc1IC02LjY0MDYyNSBMIDQuODI4MTI1IC02LjY0MDYyNSBMIDQuODI4MTI1IC03LjM1OTM3NSBMIDQuMTcxODc1IC03LjM1OTM3NSBMIDQuMTcxODc1IC02LjY0MDYyNSBaIE0gNS44MjgxMjUgLTEuMDMxMjUgTCA1LjUxNTYyNSAtMC41NjI1IEMgNi4zNzUgLTAuMjUgNy4yMTg3NSAwLjE4NzUgOC4wNDY4NzUgMC43MzQzNzUgTCA4LjM3NSAwLjIwMzEyNSBDIDcuNjA5Mzc1IC0wLjI4MTI1IDYuNzY1NjI1IC0wLjY4NzUgNS44MjgxMjUgLTEuMDMxMjUgWiBNIDMgLTEuMDQ2ODc1IEMgMi4zNTkzNzUgLTAuNTYyNSAxLjU0Njg3NSAtMC4xNzE4NzUgMC41NjI1IDAuMTI1IEwgMC44NDM3NSAwLjcwMzEyNSBDIDEuODU5Mzc1IDAuMzQzNzUgMi43MDMxMjUgLTAuMDkzNzUgMy4zNzUgLTAuNjI1IFogTSAzIC0xLjA0Njg3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDMtNCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gNi45NTMxMjUgLTcuMzU5Mzc1IEwgNi45NTMxMjUgMC45MDYyNSBMIDcuNjA5Mzc1IDAuOTA2MjUgTCA3LjYwOTM3NSAtNy4zNTkzNzUgWiBNIDEuNjcxODc1IC00LjM5MDYyNSBMIDQuNzY1NjI1IC00LjM5MDYyNSBMIDQuNzY1NjI1IC03IEwgMC44NDM3NSAtNyBMIDAuODQzNzUgLTYuNDA2MjUgTCA0LjEyNSAtNi40MDYyNSBMIDQuMTI1IC01IEwgMS4xMjUgLTUgTCAwLjY1NjI1IC0yLjMxMjUgTCA0LjIwMzEyNSAtMi4zMTI1IEMgNC4yMDMxMjUgLTEuMjY1NjI1IDQuMTU2MjUgLTAuNTYyNSA0LjA0Njg3NSAtMC4yMzQzNzUgQyAzLjkzNzUgMC4wNzgxMjUgMy41MzEyNSAwLjI1IDIuODU5Mzc1IDAuMjUgQyAyLjU2MjUgMC4yNSAyLjI4MTI1IDAuMjE4NzUgMS45ODQzNzUgMC4yMDMxMjUgTCAyLjE1NjI1IDAuODEyNSBDIDIuNDM3NSAwLjgyODEyNSAyLjcxODc1IDAuODQzNzUgMyAwLjg0Mzc1IEMgMy45ODQzNzUgMC44MTI1IDQuNTMxMjUgMC41NDY4NzUgNC42NTYyNSAwLjAzMTI1IEMgNC43ODEyNSAtMC40Mzc1IDQuODQzNzUgLTEuNDA2MjUgNC44NDM3NSAtMi44OTA2MjUgTCAxLjM0Mzc1IC0yLjg5MDYyNSBaIE0gMS42NzE4NzUgLTQuMzkwNjI1ICIvPgo8L3N5bWJvbD4KPHN5bWJvbCBvdmVyZmxvdz0idmlzaWJsZSIgaWQ9ImdseXBoMy01Ij4KPHBhdGggc3R5bGU9InN0cm9rZTpub25lOyIgZD0iTSAwLjg1OTM3NSAtNi43MDMxMjUgTCAwLjg1OTM3NSAtNi4xMjUgTCA0LjE4NzUgLTYuMTI1IEMgNC4xNTYyNSAtNS45Mzc1IDQuMTA5Mzc1IC01LjczNDM3NSA0LjA2MjUgLTUuNTMxMjUgTCAxLjg1OTM3NSAtNS41MzEyNSBMIDEuODU5Mzc1IC0xLjI5Njg3NSBMIDAuNTE1NjI1IC0xLjI5Njg3NSBMIDAuNTE1NjI1IC0wLjcxODc1IEwgMy4xNzE4NzUgLTAuNzE4NzUgQyAyLjUzMTI1IC0wLjI2NTYyNSAxLjczNDM3NSAwLjA5Mzc1IDAuNzM0Mzc1IDAuMzc1IEwgMS4wMTU2MjUgMC45MjE4NzUgQyAyLjAzMTI1IDAuNjA5Mzc1IDIuODc1IDAuMjAzMTI1IDMuNTYyNSAtMC4yODEyNSBMIDMuMTg3NSAtMC43MTg3NSBMIDUuNzY1NjI1IC0wLjcxODc1IEwgNS40Njg3NSAtMC4yODEyNSBDIDYuMzQzNzUgMC4wMTU2MjUgNy4xODc1IDAuNDA2MjUgOC4wMTU2MjUgMC45Mzc1IEwgOC4zNTkzNzUgMC40MjE4NzUgQyA3LjU5Mzc1IC0wLjAxNTYyNSA2LjczNDM3NSAtMC4zOTA2MjUgNS43OTY4NzUgLTAuNzE4NzUgTCA4LjQ4NDM3NSAtMC43MTg3NSBMIDguNDg0Mzc1IC0xLjI5Njg3NSBMIDcuMjk2ODc1IC0xLjI5Njg3NSBMIDcuMjk2ODc1IC01LjUzMTI1IEwgNC43MTg3NSAtNS41MzEyNSBDIDQuNzY1NjI1IC01LjczNDM3NSA0LjgxMjUgLTUuOTM3NSA0Ljg0Mzc1IC02LjEyNSBMIDguMTQwNjI1IC02LjEyNSBMIDguMTQwNjI1IC02LjcwMzEyNSBMIDQuOTUzMTI1IC02LjcwMzEyNSBDIDQuOTg0Mzc1IC02Ljg5MDYyNSA1IC03LjA5Mzc1IDUuMDE1NjI1IC03LjI5Njg3NSBMIDQuMzU5Mzc1IC03LjM3NSBMIDQuMjgxMjUgLTYuNzAzMTI1IFogTSAyLjQ2ODc1IC0xLjI5Njg3NSBMIDIuNDY4NzUgLTEuODc1IEwgNi42NzE4NzUgLTEuODc1IEwgNi42NzE4NzUgLTEuMjk2ODc1IFogTSAyLjQ2ODc1IC0yLjM1OTM3NSBMIDIuNDY4NzUgLTIuOTIxODc1IEwgNi42NzE4NzUgLTIuOTIxODc1IEwgNi42NzE4NzUgLTIuMzU5Mzc1IFogTSAyLjQ2ODc1IC0zLjQwNjI1IEwgMi40Njg3NSAtMy45NTMxMjUgTCA2LjY3MTg3NSAtMy45NTMxMjUgTCA2LjY3MTg3NSAtMy40MDYyNSBaIE0gMi40Njg3NSAtNC40NTMxMjUgTCAyLjQ2ODc1IC01LjAxNTYyNSBMIDYuNjcxODc1IC01LjAxNTYyNSBMIDYuNjcxODc1IC00LjQ1MzEyNSBaIE0gMi40Njg3NSAtNC40NTMxMjUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgzLTYiPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDQuNTQ2ODc1IC0wLjkwNjI1IEMgNS43NSAtMC40Mzc1IDYuOTIxODc1IDAuMTg3NSA4LjA3ODEyNSAwLjk1MzEyNSBMIDguNDIxODc1IDAuMzkwNjI1IEMgNy4zNTkzNzUgLTAuMjgxMjUgNi4xODc1IC0wLjg3NSA0LjkwNjI1IC0xLjM3NSBDIDQuOTg0Mzc1IC0xLjUgNS4wNjI1IC0xLjY0MDYyNSA1LjE0MDYyNSAtMS43ODEyNSBMIDguMzEyNSAtMS43ODEyNSBMIDguMzEyNSAtMi4zOTA2MjUgTCA1LjQyMTg3NSAtMi4zOTA2MjUgQyA1LjYwOTM3NSAtMi45NTMxMjUgNS43MTg3NSAtMy41OTM3NSA1Ljc1IC00LjI5Njg3NSBMIDUuNzUgLTUuMzU5Mzc1IEwgNS4xMjUgLTUuMzU5Mzc1IEwgNS4xMjUgLTQuMjk2ODc1IEMgNS4wOTM3NSAtMy41OTM3NSA0Ljk2ODc1IC0yLjk1MzEyNSA0LjczNDM3NSAtMi4zOTA2MjUgTCAwLjcwMzEyNSAtMi4zOTA2MjUgTCAwLjcwMzEyNSAtMS43ODEyNSBMIDQuNDIxODc1IC0xLjc4MTI1IEMgNC4zMjgxMjUgLTEuNjQwNjI1IDQuMjM0Mzc1IC0xLjUgNC4xMjUgLTEuMzc1IEMgMy40Njg3NSAtMC42NTYyNSAyLjI5Njg3NSAtMC4wNzgxMjUgMC42MjUgMC4zNTkzNzUgTCAwLjk4NDM3NSAwLjkwNjI1IEMgMi42MjUgMC40ODQzNzUgMy44MTI1IC0wLjEyNSA0LjU0Njg3NSAtMC45MDYyNSBaIE0gMS45MDYyNSAtNC4xMjUgTCAxLjU3ODEyNSAtMy42NDA2MjUgQyAyLjE4NzUgLTMuNDA2MjUgMi43OTY4NzUgLTMuMDYyNSAzLjM1OTM3NSAtMi42MjUgTCAzLjcwMzEyNSAtMy4xNDA2MjUgQyAzLjE1NjI1IC0zLjUxNTYyNSAyLjU2MjUgLTMuODU5Mzc1IDEuOTA2MjUgLTQuMTI1IFogTSAyLjcwMzEyNSAtNS40MjE4NzUgTCAyLjM3NSAtNC45Mzc1IEMgMyAtNC42ODc1IDMuNjI1IC00LjMyODEyNSA0LjIzNDM3NSAtMy44NzUgTCA0LjU2MjUgLTQuMzkwNjI1IEMgNCAtNC43OTY4NzUgMy4zOTA2MjUgLTUuMTQwNjI1IDIuNzAzMTI1IC01LjQyMTg3NSBaIE0gOC4xNTYyNSAtNi40Njg3NSBMIDQuODkwNjI1IC02LjQ2ODc1IEMgNC43ODEyNSAtNi44MjgxMjUgNC42NTYyNSAtNy4xNDA2MjUgNC41NDY4NzUgLTcuNDA2MjUgTCAzLjg3NSAtNy4yOTY4NzUgQyA0LjAxNTYyNSAtNy4wNDY4NzUgNC4xNDA2MjUgLTYuNzgxMjUgNC4yNSAtNi40Njg3NSBMIDAuODI4MTI1IC02LjQ2ODc1IEwgMC44MjgxMjUgLTQuNzUgTCAxLjQ1MzEyNSAtNC43NSBMIDEuNDUzMTI1IC01Ljg3NSBMIDcuNTMxMjUgLTUuODc1IEwgNy41MzEyNSAtNC43NSBMIDguMTU2MjUgLTQuNzUgWiBNIDguMTU2MjUgLTYuNDY4NzUgIi8+Cjwvc3ltYm9sPgo8c3ltYm9sIG92ZXJmbG93PSJ2aXNpYmxlIiBpZD0iZ2x5cGgzLTciPgo8cGF0aCBzdHlsZT0ic3Ryb2tlOm5vbmU7IiBkPSJNIDQuOTA2MjUgLTcuMzQzNzUgTCA0LjkwNjI1IC01LjkwNjI1IEwgMy4xODc1IC01LjkwNjI1IEwgMy4xODc1IC01LjI5Njg3NSBMIDQuODkwNjI1IC01LjI5Njg3NSBDIDQuODI4MTI1IC0zLjM5MDYyNSA0LjE4NzUgLTEuOTg0Mzc1IDMgLTEuMDkzNzUgTCAzLjQ4NDM3NSAtMC42NTYyNSBDIDQuNzgxMjUgLTEuNjQwNjI1IDUuNDY4NzUgLTMuMTg3NSA1LjU0Njg3NSAtNS4yOTY4NzUgTCA3LjUxNTYyNSAtNS4yOTY4NzUgQyA3LjQ4NDM3NSAtMy41IDcuNDA2MjUgLTIuMzkwNjI1IDcuMjgxMjUgLTEuOTg0Mzc1IEMgNy4xNDA2MjUgLTEuNTQ2ODc1IDYuNzk2ODc1IC0xLjMyODEyNSA2LjI1IC0xLjMyODEyNSBDIDYuMDc4MTI1IC0xLjMyODEyNSA1Ljg3NSAtMS4zNDM3NSA1LjYwOTM3NSAtMS4zNTkzNzUgTCA1Ljc4MTI1IC0wLjc1IEMgNi4wMTU2MjUgLTAuNzM0Mzc1IDYuMjM0Mzc1IC0wLjcxODc1IDYuNDA2MjUgLTAuNzE4NzUgQyA3LjA0Njg3NSAtMC43MTg3NSA3LjUgLTAuOTY4NzUgNy43NjU2MjUgLTEuNDUzMTI1IEMgOC4wMTU2MjUgLTEuOTM3NSA4LjE0MDYyNSAtMy40MjE4NzUgOC4xNTYyNSAtNS45MDYyNSBMIDUuNTYyNSAtNS45MDYyNSBMIDUuNTYyNSAtNy4zNDM3NSBaIE0gMS4xMDkzNzUgLTcuMjAzMTI1IEwgMC42NTYyNSAtNi43ODEyNSBDIDEuMzEyNSAtNi4yNjU2MjUgMS44MTI1IC01Ljc5Njg3NSAyLjE3MTg3NSAtNS4zNDM3NSBMIDIuNjQwNjI1IC01LjgyODEyNSBDIDIuMjM0Mzc1IC02LjI4MTI1IDEuNzE4NzUgLTYuNzM0Mzc1IDEuMTA5Mzc1IC03LjIwMzEyNSBaIE0gNi41NzgxMjUgMC43MzQzNzUgTCA4LjQ4NDM3NSAwLjczNDM3NSBMIDguNjQwNjI1IDAuMDc4MTI1IEMgOC40MjE4NzUgMC4wOTM3NSA4LjEwOTM3NSAwLjEwOTM3NSA3LjcwMzEyNSAwLjEwOTM3NSBDIDcuMjk2ODc1IDAuMTA5Mzc1IDYuODkwNjI1IDAuMTI1IDYuNSAwLjEyNSBDIDUuNzY1NjI1IDAuMTI1IDUuMTQwNjI1IDAuMTA5Mzc1IDQuNjQwNjI1IDAuMTA5Mzc1IEMgNC4wOTM3NSAwLjA5Mzc1IDMuNjU2MjUgMC4wMzEyNSAzLjM1OTM3NSAtMC4wOTM3NSBDIDMuMTA5Mzc1IC0wLjIxODc1IDIuODU5Mzc1IC0wLjQwNjI1IDIuNjI1IC0wLjY1NjI1IEMgMi41NDY4NzUgLTAuNzUgMi40Njg3NSAtMC44MTI1IDIuMzkwNjI1IC0wLjg1OTM3NSBMIDIuMzkwNjI1IC00LjI1IEwgMC40ODQzNzUgLTQuMjUgTCAwLjQ4NDM3NSAtMy42MjUgTCAxLjc2NTYyNSAtMy42MjUgTCAxLjc2NTYyNSAtMC45MDYyNSBDIDEuMzkwNjI1IC0wLjczNDM3NSAwLjk2ODc1IC0wLjI2NTYyNSAwLjQ4NDM3NSAwLjUgTCAwLjk2ODc1IDAuOTM3NSBDIDEuNDY4NzUgMC4wOTM3NSAxLjg0Mzc1IC0wLjMyODEyNSAyLjA2MjUgLTAuMzI4MTI1IEMgMi4xNzE4NzUgLTAuMzI4MTI1IDIuMjk2ODc1IC0wLjI1IDIuNDM3NSAtMC4wOTM3NSBDIDIuNzE4NzUgMC4yMTg3NSAzLjA0Njg3NSAwLjQ1MzEyNSAzLjQyMTg3NSAwLjU2MjUgQyAzLjc5Njg3NSAwLjY1NjI1IDQuMjk2ODc1IDAuNzE4NzUgNC45MDYyNSAwLjcxODc1IEMgNS41MTU2MjUgMC43MzQzNzUgNi4wNjI1IDAuNzM0Mzc1IDYuNTc4MTI1IDAuNzM0Mzc1IFogTSA2LjU3ODEyNSAwLjczNDM3NSAiLz4KPC9zeW1ib2w+CjxzeW1ib2wgb3ZlcmZsb3c9InZpc2libGUiIGlkPSJnbHlwaDMtOCI+CjxwYXRoIHN0eWxlPSJzdHJva2U6bm9uZTsiIGQ9Ik0gMS40MDYyNSAtNyBMIDEuNDA2MjUgLTMuNDIxODc1IEwgMy4wOTM3NSAtMy40MjE4NzUgQyAyLjUgLTIuNzk2ODc1IDEuNTc4MTI1IC0yLjI2NTYyNSAwLjMyODEyNSAtMS44NTkzNzUgTCAwLjY3MTg3NSAtMS4yODEyNSBDIDIuMTA5Mzc1IC0xLjg1OTM3NSAzLjE0MDYyNSAtMi41NjI1IDMuNzY1NjI1IC0zLjQyMTg3NSBMIDUuMjE4NzUgLTMuNDIxODc1IEMgNS40Mzc1IC0zLjA5Mzc1IDUuNzM0Mzc1IC0yLjc2NTYyNSA2LjEyNSAtMi40Njg3NSBMIDUuNTkzNzUgLTIuNDY4NzUgTCA1LjU5Mzc1IDAuOTIxODc1IEwgNi4yMzQzNzUgMC45MjE4NzUgTCA2LjIzNDM3NSAtMi4zNTkzNzUgQyA2Ljc5Njg3NSAtMS45MjE4NzUgNy41MTU2MjUgLTEuNTMxMjUgOC4zOTA2MjUgLTEuMjE4NzUgTCA4LjY3MTg3NSAtMS43ODEyNSBDIDcuNDIxODc1IC0yLjE4NzUgNi40ODQzNzUgLTIuNzM0Mzc1IDUuODkwNjI1IC0zLjQyMTg3NSBMIDcuNjI1IC0zLjQyMTg3NSBMIDcuNjI1IC03IFogTSA3IC00IEwgNC44MTI1IC00IEwgNC44MTI1IC00Ljk1MzEyNSBMIDcgLTQuOTUzMTI1IFogTSA0LjE4NzUgLTQgTCAyLjAzMTI1IC00IEwgMi4wMzEyNSAtNC45NTMxMjUgTCA0LjE4NzUgLTQuOTUzMTI1IFogTSAyLjAzMTI1IC01LjUgTCAyLjAzMTI1IC02LjQyMTg3NSBMIDQuMTg3NSAtNi40MjE4NzUgTCA0LjE4NzUgLTUuNSBaIE0gNC44MTI1IC02LjQyMTg3NSBMIDcgLTYuNDIxODc1IEwgNyAtNS41IEwgNC44MTI1IC01LjUgWiBNIDIuOTA2MjUgLTIuNDY4NzUgQyAyLjg5MDYyNSAtMS44MTI1IDIuNzk2ODc1IC0xLjI4MTI1IDIuNTkzNzUgLTAuODQzNzUgQyAyLjMyODEyNSAtMC4zNDM3NSAxLjc2NTYyNSAwLjA3ODEyNSAwLjk2ODc1IDAuNDA2MjUgTCAxLjM5MDYyNSAwLjkyMTg3NSBDIDIuMzQzNzUgMC41MTU2MjUgMi45Njg3NSAtMC4wMTU2MjUgMy4yMzQzNzUgLTAuNjcxODc1IEMgMy40NTMxMjUgLTEuMTU2MjUgMy41NjI1IC0xLjc2NTYyNSAzLjU2MjUgLTIuNDY4NzUgWiBNIDIuOTA2MjUgLTIuNDY4NzUgIi8+Cjwvc3ltYm9sPgo8L2c+CjwvZGVmcz4KPGcgaWQ9InN1cmZhY2UxIj4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0xIiB4PSIyNy45MDQ2NyIgeT0iMTY4Ljk2NCIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtMiIgeD0iMjcuOTA0NjciIHk9IjE5MS4yNzMzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC0zIiB4PSIyNy45MDQ2NyIgeT0iMjEzLjU4MjciLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTQiIHg9IjI3LjkwNDY3IiB5PSIyMzUuODkyIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC01IiB4PSIyNy45MDQ2NyIgeT0iMTI0LjM0NTMzIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC02IiB4PSIyNy45MDQ2NyIgeT0iMTQ2LjY1NDciLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTciIHg9IjI3LjkwNDY3IiB5PSI1Ny40MTczMyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtOCIgeD0iMjcuOTA0NjciIHk9IjEwMi4wMzYiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTkiIHg9IjI3LjkwNDY3IiB5PSI3OS43MjY2NyIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDExOS4yMzgyODEgOTUgTCAxNDEuNTQ2ODc1IDk1IEwgMTQxLjU0Njg3NSAxMTcuMzA4NTk0IEwgMTE5LjIzODI4MSAxMTcuMzA4NTk0IFogTSAxMTkuMjM4MjgxIDk1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDk2LjkyOTY4OCA1MC4zODI4MTIgTCAxMTkuMjM4MjgxIDUwLjM4MjgxMiBMIDExOS4yMzgyODEgNzIuNjkxNDA2IEwgOTYuOTI5Njg4IDcyLjY5MTQwNiBaIE0gOTYuOTI5Njg4IDUwLjM4MjgxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMTkuMjM4MjgxIDE4NC4yMzgyODEgTCAxNDEuNTQ2ODc1IDE4NC4yMzgyODEgTCAxNDEuNTQ2ODc1IDIwNi41NDY4NzUgTCAxMTkuMjM4MjgxIDIwNi41NDY4NzUgWiBNIDExOS4yMzgyODEgMTg0LjIzODI4MSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTUiIHg9IjExNy4xNDIiIHk9IjM1LjEwOCIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDExOS4yMzgyODEgMTE3LjMwODU5NCBMIDE0MS41NDY4NzUgMTE3LjMwODU5NCBMIDE0MS41NDY4NzUgMTM5LjYxNzE4OCBMIDExOS4yMzgyODEgMTM5LjYxNzE4OCBaIE0gMTE5LjIzODI4MSAxMTcuMzA4NTk0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDk2LjkyOTY4OCAyOC4wNzAzMTIgTCAxMTkuMjM4MjgxIDI4LjA3MDMxMiBMIDExOS4yMzgyODEgNTAuMzgyODEyIEwgOTYuOTI5Njg4IDUwLjM4MjgxMiBaIE0gOTYuOTI5Njg4IDI4LjA3MDMxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjkyLjA4NDciIHk9Ijc4LjcyNjY3Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi0xIiB4PSI5Ni4wODA3IiB5PSI4MS43MjY2NyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi0yIiB4PSI5OS4wODA3IiB5PSI4MS43MjY2NyIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCA1MC4zODI4MTIgTCA5Ni45Mjk2ODggNTAuMzgyODEyIEwgOTYuOTI5Njg4IDcyLjY5MTQwNiBMIDc0LjYxNzE4OCA3Mi42OTE0MDYgWiBNIDc0LjYxNzE4OCA1MC4zODI4MTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDExNy4zMDg1OTQgTCA1Mi4zMDg1OTQgMTE3LjMwODU5NCBMIDUyLjMwODU5NCAxMzkuNjE3MTg4IEwgNzQuNjE3MTg4IDEzOS42MTcxODggWiBNIDc0LjYxNzE4OCAxMTcuMzA4NTk0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCAxMzkuNjE3MTg4IEwgNTIuMzA4NTk0IDEzOS42MTcxODggTCA1Mi4zMDg1OTQgMTYxLjkyOTY4OCBMIDc0LjYxNzE4OCAxNjEuOTI5Njg4IFogTSA3NC42MTcxODggMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjQ3LjQ2NiIgeT0iMTkwLjI3MzMiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTMiIHg9IjUxLjQ2MiIgeT0iMTkzLjI3MzMiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItNCIgeD0iNTQuNDYyIiB5PSIxOTMuMjczMyIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDk2LjkyOTY4OCAxODQuMjM4MjgxIEwgMTE5LjIzODI4MSAxODQuMjM4MjgxIEwgMTE5LjIzODI4MSAyMDYuNTQ2ODc1IEwgOTYuOTI5Njg4IDIwNi41NDY4NzUgWiBNIDk2LjkyOTY4OCAxODQuMjM4MjgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDExOS4yMzgyODEgNzIuNjkxNDA2IEwgMTQxLjU0Njg3NSA3Mi42OTE0MDYgTCAxNDEuNTQ2ODc1IDk1IEwgMTE5LjIzODI4MSA5NSBaIE0gMTE5LjIzODI4MSA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gOTYuOTI5Njg4IDk1IEwgMTE5LjIzODI4MSA5NSBMIDExOS4yMzgyODEgMTE3LjMwODU5NCBMIDk2LjkyOTY4OCAxMTcuMzA4NTk0IFogTSA5Ni45Mjk2ODggOTUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gOTYuOTI5Njg4IDExNy4zMDg1OTQgTCAxMTkuMjM4MjgxIDExNy4zMDg1OTQgTCAxMTkuMjM4MjgxIDEzOS42MTcxODggTCA5Ni45Mjk2ODggMTM5LjYxNzE4OCBaIE0gOTYuOTI5Njg4IDExNy4zMDg1OTQgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTE5LjIzODI4MSA1MC4zODI4MTIgTCAxNDEuNTQ2ODc1IDUwLjM4MjgxMiBMIDE0MS41NDY4NzUgNzIuNjkxNDA2IEwgMTE5LjIzODI4MSA3Mi42OTE0MDYgWiBNIDExOS4yMzgyODEgNTAuMzgyODEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCAxMTcuMzA4NTk0IEwgOTYuOTI5Njg4IDExNy4zMDg1OTQgTCA5Ni45Mjk2ODggMTM5LjYxNzE4OCBMIDc0LjYxNzE4OCAxMzkuNjE3MTg4IFogTSA3NC42MTcxODggMTE3LjMwODU5NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA3NC42MTcxODggMjguMDcwMzEyIEwgOTYuOTI5Njg4IDI4LjA3MDMxMiBMIDk2LjkyOTY4OCA1MC4zODI4MTIgTCA3NC42MTcxODggNTAuMzgyODEyIFogTSA3NC42MTcxODggMjguMDcwMzEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDk2LjkyOTY4OCA3Mi42OTE0MDYgTCAxMTkuMjM4MjgxIDcyLjY5MTQwNiBMIDExOS4yMzgyODEgOTUgTCA5Ni45Mjk2ODggOTUgWiBNIDk2LjkyOTY4OCA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDcyLjY5MTQwNiBMIDk2LjkyOTY4OCA3Mi42OTE0MDYgTCA5Ni45Mjk2ODggOTUgTCA3NC42MTcxODggOTUgWiBNIDc0LjYxNzE4OCA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDE2MS45Mjk2ODggTCA1Mi4zMDg1OTQgMTYxLjkyOTY4OCBMIDUyLjMwODU5NCAxODQuMjM4MjgxIEwgNzQuNjE3MTg4IDE4NC4yMzgyODEgWiBNIDc0LjYxNzE4OCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCA1Ljc2MTcxOSBMIDk2LjkyOTY4OCA1Ljc2MTcxOSBMIDk2LjkyOTY4OCAyOC4wNzAzMTIgTCA3NC42MTcxODggMjguMDcwMzEyIFogTSA3NC42MTcxODggNS43NjE3MTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDE2MS45Mjk2ODggTCA5Ni45Mjk2ODggMTYxLjkyOTY4OCBMIDk2LjkyOTY4OCAxODQuMjM4MjgxIEwgNzQuNjE3MTg4IDE4NC4yMzgyODEgWiBNIDc0LjYxNzE4OCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtOCIgeD0iOTQuODMyNyIgeT0iMzUuMTA4Ii8+CjwvZz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDE4NC4yMzgyODEgTCA1Mi4zMDg1OTQgMTg0LjIzODI4MSBMIDUyLjMwODU5NCAyMDYuNTQ2ODc1IEwgNzQuNjE3MTg4IDIwNi41NDY4NzUgWiBNIDc0LjYxNzE4OCAxODQuMjM4MjgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCA3Mi42OTE0MDYgTCA1Mi4zMDg1OTQgNzIuNjkxNDA2IEwgNTIuMzA4NTk0IDk1IEwgNzQuNjE3MTg4IDk1IFogTSA3NC42MTcxODggNzIuNjkxNDA2ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCAxMzkuNjE3MTg4IEwgOTYuOTI5Njg4IDEzOS42MTcxODggTCA5Ni45Mjk2ODggMTYxLjkyOTY4OCBMIDc0LjYxNzE4OCAxNjEuOTI5Njg4IFogTSA3NC42MTcxODggMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMTkuMjM4MjgxIDEzOS42MTcxODggTCAxNDEuNTQ2ODc1IDEzOS42MTcxODggTCAxNDEuNTQ2ODc1IDE2MS45Mjk2ODggTCAxMTkuMjM4MjgxIDE2MS45Mjk2ODggWiBNIDExOS4yMzgyODEgMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA5Ni45Mjk2ODggMTM5LjYxNzE4OCBMIDExOS4yMzgyODEgMTM5LjYxNzE4OCBMIDExOS4yMzgyODEgMTYxLjkyOTY4OCBMIDk2LjkyOTY4OCAxNjEuOTI5Njg4IFogTSA5Ni45Mjk2ODggMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMTkuMjM4MjgxIDUuNzYxNzE5IEwgMTQxLjU0Njg3NSA1Ljc2MTcxOSBMIDE0MS41NDY4NzUgMjguMDcwMzEyIEwgMTE5LjIzODI4MSAyOC4wNzAzMTIgWiBNIDExOS4yMzgyODEgNS43NjE3MTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDk1IEwgNTIuMzA4NTk0IDk1IEwgNTIuMzA4NTk0IDExNy4zMDg1OTQgTCA3NC42MTcxODggMTE3LjMwODU5NCBaIE0gNzQuNjE3MTg4IDk1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDk2LjkyOTY4OCAxNjEuOTI5Njg4IEwgMTE5LjIzODI4MSAxNjEuOTI5Njg4IEwgMTE5LjIzODI4MSAxODQuMjM4MjgxIEwgOTYuOTI5Njg4IDE4NC4yMzgyODEgWiBNIDk2LjkyOTY4OCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDc0LjYxNzE4OCA5NSBMIDk2LjkyOTY4OCA5NSBMIDk2LjkyOTY4OCAxMTcuMzA4NTk0IEwgNzQuNjE3MTg4IDExNy4zMDg1OTQgWiBNIDc0LjYxNzE4OCA5NSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA5Ni45Mjk2ODggNS43NjE3MTkgTCAxMTkuMjM4MjgxIDUuNzYxNzE5IEwgMTE5LjIzODI4MSAyOC4wNzAzMTIgTCA5Ni45Mjk2ODggMjguMDcwMzEyIFogTSA5Ni45Mjk2ODggNS43NjE3MTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDE4NC4yMzgyODEgTCA5Ni45Mjk2ODggMTg0LjIzODI4MSBMIDk2LjkyOTY4OCAyMDYuNTQ2ODc1IEwgNzQuNjE3MTg4IDIwNi41NDY4NzUgWiBNIDc0LjYxNzE4OCAxODQuMjM4MjgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNyIgeD0iNTAuMjE0IiB5PSIzNS4xMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTkiIHg9IjcyLjUyMzMzIiB5PSIzNS4xMDgiLz4KPC9nPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSA1Mi4zMDg1OTQgNS43NjE3MTkgTCA3NC42MTcxODggNS43NjE3MTkgTCA3NC42MTcxODggMjguMDcwMzEyIEwgNTIuMzA4NTk0IDI4LjA3MDMxMiBaIE0gNTIuMzA4NTk0IDUuNzYxNzE5ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDUyLjMwODU5NCA1MC4zODI4MTIgTCA3NC42MTcxODggNTAuMzgyODEyIEwgNzQuNjE3MTg4IDcyLjY5MTQwNiBMIDUyLjMwODU5NCA3Mi42OTE0MDYgWiBNIDUyLjMwODU5NCA1MC4zODI4MTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNTIuMzA4NTk0IDI4LjA3MDMxMiBMIDc0LjYxNzE4OCAyOC4wNzAzMTIgTCA3NC42MTcxODggNTAuMzgyODEyIEwgNTIuMzA4NTk0IDUwLjM4MjgxMiBaIE0gNTIuMzA4NTk0IDI4LjA3MDMxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMTkuMjM4MjgxIDE2MS45Mjk2ODggTCAxNDEuNTQ2ODc1IDE2MS45Mjk2ODggTCAxNDEuNTQ2ODc1IDE4NC4yMzgyODEgTCAxMTkuMjM4MjgxIDE4NC4yMzgyODEgWiBNIDExOS4yMzgyODEgMTYxLjkyOTY4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxMTkuMjM4MjgxIDI4LjA3MDMxMiBMIDE0MS41NDY4NzUgMjguMDcwMzEyIEwgMTQxLjU0Njg3NSA1MC4zODI4MTIgTCAxMTkuMjM4MjgxIDUwLjM4MjgxMiBaIE0gMTE5LjIzODI4MSAyOC4wNzAzMTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMy0xIiB4PSI1IiB5PSIxMzAuNCIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtMiIgeD0iNSIgeT0iMTQwLjgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgzLTMiIHg9IjUiIHk9IjE1MS4yIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMy00IiB4PSI1IiB5PSIxNjEuNiIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtNSIgeD0iMTYzLjExODciIHk9IjE1LjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtNiIgeD0iMTcyLjExODciIHk9IjE1LjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtNyIgeD0iMTgxLjExODciIHk9IjE1LjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtOCIgeD0iMTkwLjExODciIHk9IjE1LjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtMiIgeD0iMTk5LjExODciIHk9IjE1LjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtMyIgeD0iMjA4LjExODciIHk9IjE1LjUiLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDMtNCIgeD0iMjE3LjExODciIHk9IjE1LjUiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTgiIHg9IjIwMy41MjMzIiB5PSIzNS4xMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTkiIHg9IjE4MS4yMTQiIHk9IjM1LjEwOCIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNSIgeD0iMjI1LjgzMjciIHk9IjM1LjEwOCIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDAtNyIgeD0iMTU4LjkwNDciIHk9IjM1LjEwOCIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIyNy45Mjk2ODggMTM5LjYxNzE4OCBMIDI1MC4yMzgyODEgMTM5LjYxNzE4OCBMIDI1MC4yMzgyODEgMTYxLjkyOTY4OCBMIDIyNy45Mjk2ODggMTYxLjkyOTY4OCBaIE0gMjI3LjkyOTY4OCAxMzkuNjE3MTg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIyNy45Mjk2ODggMTYxLjkyOTY4OCBMIDI1MC4yMzgyODEgMTYxLjkyOTY4OCBMIDI1MC4yMzgyODEgMTg0LjIzODI4MSBMIDIyNy45Mjk2ODggMTg0LjIzODI4MSBaIE0gMjI3LjkyOTY4OCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgMTE3LjMwODU5NCBMIDIwNS42MTcxODggMTE3LjMwODU5NCBMIDIwNS42MTcxODggMTM5LjYxNzE4OCBMIDE4My4zMDg1OTQgMTM5LjYxNzE4OCBaIE0gMTgzLjMwODU5NCAxMTcuMzA4NTk0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIwNS42MTcxODggMTE3LjMwODU5NCBMIDIyNy45Mjk2ODggMTE3LjMwODU5NCBMIDIyNy45Mjk2ODggMTM5LjYxNzE4OCBMIDIwNS42MTcxODggMTM5LjYxNzE4OCBaIE0gMjA1LjYxNzE4OCAxMTcuMzA4NTk0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIwNS42MTcxODggMTYxLjkyOTY4OCBMIDIyNy45Mjk2ODggMTYxLjkyOTY4OCBMIDIyNy45Mjk2ODggMTg0LjIzODI4MSBMIDIwNS42MTcxODggMTg0LjIzODI4MSBaIE0gMjA1LjYxNzE4OCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgMTM5LjYxNzE4OCBMIDIwNS42MTcxODggMTM5LjYxNzE4OCBMIDIwNS42MTcxODggMTYxLjkyOTY4OCBMIDE4My4zMDg1OTQgMTYxLjkyOTY4OCBaIE0gMTgzLjMwODU5NCAxMzkuNjE3MTg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIyNy45Mjk2ODggNTAuMzgyODEyIEwgMjUwLjIzODI4MSA1MC4zODI4MTIgTCAyNTAuMjM4MjgxIDcyLjY5MTQwNiBMIDIyNy45Mjk2ODggNzIuNjkxNDA2IFogTSAyMjcuOTI5Njg4IDUwLjM4MjgxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyMjcuOTI5Njg4IDI4LjA3MDMxMiBMIDI1MC4yMzgyODEgMjguMDcwMzEyIEwgMjUwLjIzODI4MSA1MC4zODI4MTIgTCAyMjcuOTI5Njg4IDUwLjM4MjgxMiBaIE0gMjI3LjkyOTY4OCAyOC4wNzAzMTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjA1LjYxNzE4OCA1Ljc2MTcxOSBMIDIyNy45Mjk2ODggNS43NjE3MTkgTCAyMjcuOTI5Njg4IDI4LjA3MDMxMiBMIDIwNS42MTcxODggMjguMDcwMzEyIFogTSAyMDUuNjE3MTg4IDUuNzYxNzE5ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgOTUgTCAyMDUuNjE3MTg4IDk1IEwgMjA1LjYxNzE4OCAxMTcuMzA4NTk0IEwgMTgzLjMwODU5NCAxMTcuMzA4NTk0IFogTSAxODMuMzA4NTk0IDk1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgMTYxLjkyOTY4OCBMIDIwNS42MTcxODggMTYxLjkyOTY4OCBMIDIwNS42MTcxODggMTg0LjIzODI4MSBMIDE4My4zMDg1OTQgMTg0LjIzODI4MSBaIE0gMTgzLjMwODU5NCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgMTg0LjIzODI4MSBMIDIwNS42MTcxODggMTg0LjIzODI4MSBMIDIwNS42MTcxODggMjA2LjU0Njg3NSBMIDE4My4zMDg1OTQgMjA2LjU0Njg3NSBaIE0gMTgzLjMwODU5NCAxODQuMjM4MjgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIwNS42MTcxODggOTUgTCAyMjcuOTI5Njg4IDk1IEwgMjI3LjkyOTY4OCAxMTcuMzA4NTk0IEwgMjA1LjYxNzE4OCAxMTcuMzA4NTk0IFogTSAyMDUuNjE3MTg4IDk1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE2MSAyOC4wNzAzMTIgTCAxODMuMzA4NTk0IDI4LjA3MDMxMiBMIDE4My4zMDg1OTQgNTAuMzgyODEyIEwgMTYxIDUwLjM4MjgxMiBaIE0gMTYxIDI4LjA3MDMxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyMjcuOTI5Njg4IDk1IEwgMjUwLjIzODI4MSA5NSBMIDI1MC4yMzgyODEgMTE3LjMwODU5NCBMIDIyNy45Mjk2ODggMTE3LjMwODU5NCBaIE0gMjI3LjkyOTY4OCA5NSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjIyMy4wODQ3IiB5PSIxNDUuNjU0NyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItNSIgeD0iMjI3LjA4MDciIHk9IjE0OC42NTQ3Ii8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTYiIHg9IjIzMC4wODA3IiB5PSIxNDguNjU0NyIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgOTUgTCAxNjEgOTUgTCAxNjEgMTE3LjMwODU5NCBMIDE4My4zMDg1OTQgMTE3LjMwODU5NCBaIE0gMTgzLjMwODU5NCA5NSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxODMuMzA4NTk0IDcyLjY5MTQwNiBMIDE2MSA3Mi42OTE0MDYgTCAxNjEgOTUgTCAxODMuMzA4NTk0IDk1IFogTSAxODMuMzA4NTk0IDcyLjY5MTQwNiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyMDUuNjE3MTg4IDUwLjM4MjgxMiBMIDIyNy45Mjk2ODggNTAuMzgyODEyIEwgMjI3LjkyOTY4OCA3Mi42OTE0MDYgTCAyMDUuNjE3MTg4IDcyLjY5MTQwNiBaIE0gMjA1LjYxNzE4OCA1MC4zODI4MTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjA1LjYxNzE4OCAyOC4wNzAzMTIgTCAyMjcuOTI5Njg4IDI4LjA3MDMxMiBMIDIyNy45Mjk2ODggNTAuMzgyODEyIEwgMjA1LjYxNzE4OCA1MC4zODI4MTIgWiBNIDIwNS42MTcxODggMjguMDcwMzEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDEtMSIgeD0iMjAwLjc3NTMiIHk9Ijc4LjcyNjY3Ii8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi0xIiB4PSIyMDQuNzcxMyIgeT0iODEuNzI2NjciLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMiIgeD0iMjA3Ljc3MTMiIHk9IjgxLjcyNjY3Ii8+CjwvZz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjA1LjYxNzE4OCA3Mi42OTE0MDYgTCAyMjcuOTI5Njg4IDcyLjY5MTQwNiBMIDIyNy45Mjk2ODggOTUgTCAyMDUuNjE3MTg4IDk1IFogTSAyMDUuNjE3MTg4IDcyLjY5MTQwNiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyMjcuOTI5Njg4IDE4NC4yMzgyODEgTCAyNTAuMjM4MjgxIDE4NC4yMzgyODEgTCAyNTAuMjM4MjgxIDIwNi41NDY4NzUgTCAyMjcuOTI5Njg4IDIwNi41NDY4NzUgWiBNIDIyNy45Mjk2ODggMTg0LjIzODI4MSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxODMuMzA4NTk0IDUuNzYxNzE5IEwgMjA1LjYxNzE4OCA1Ljc2MTcxOSBMIDIwNS42MTcxODggMjguMDcwMzEyIEwgMTgzLjMwODU5NCAyOC4wNzAzMTIgWiBNIDE4My4zMDg1OTQgNS43NjE3MTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTYxIDUwLjM4MjgxMiBMIDE4My4zMDg1OTQgNTAuMzgyODEyIEwgMTgzLjMwODU5NCA3Mi42OTE0MDYgTCAxNjEgNzIuNjkxNDA2IFogTSAxNjEgNTAuMzgyODEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgMTg0LjIzODI4MSBMIDE2MSAxODQuMjM4MjgxIEwgMTYxIDIwNi41NDY4NzUgTCAxODMuMzA4NTk0IDIwNi41NDY4NzUgWiBNIDE4My4zMDg1OTQgMTg0LjIzODI4MSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxODMuMzA4NTk0IDExNy4zMDg1OTQgTCAxNjEgMTE3LjMwODU5NCBMIDE2MSAxMzkuNjE3MTg4IEwgMTgzLjMwODU5NCAxMzkuNjE3MTg4IFogTSAxODMuMzA4NTk0IDExNy4zMDg1OTQgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjI3LjkyOTY4OCA1Ljc2MTcxOSBMIDI1MC4yMzgyODEgNS43NjE3MTkgTCAyNTAuMjM4MjgxIDI4LjA3MDMxMiBMIDIyNy45Mjk2ODggMjguMDcwMzEyIFogTSAyMjcuOTI5Njg4IDUuNzYxNzE5ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgMTM5LjYxNzE4OCBMIDE2MSAxMzkuNjE3MTg4IEwgMTYxIDE2MS45Mjk2ODggTCAxODMuMzA4NTk0IDE2MS45Mjk2ODggWiBNIDE4My4zMDg1OTQgMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjE1Ni4xNTY3IiB5PSIxOTAuMjczMyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMyIgeD0iMTYwLjE1MjciIHk9IjE5My4yNzMzIi8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTQiIHg9IjE2My4xNTI3IiB5PSIxOTMuMjczMyIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDIyNy45Mjk2ODggNzIuNjkxNDA2IEwgMjUwLjIzODI4MSA3Mi42OTE0MDYgTCAyNTAuMjM4MjgxIDk1IEwgMjI3LjkyOTY4OCA5NSBaIE0gMjI3LjkyOTY4OCA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjI3LjkyOTY4OCAxMTcuMzA4NTk0IEwgMjUwLjIzODI4MSAxMTcuMzA4NTk0IEwgMjUwLjIzODI4MSAxMzkuNjE3MTg4IEwgMjI3LjkyOTY4OCAxMzkuNjE3MTg4IFogTSAyMjcuOTI5Njg4IDExNy4zMDg1OTQgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTgzLjMwODU5NCAxNjEuOTI5Njg4IEwgMTYxIDE2MS45Mjk2ODggTCAxNjEgMTg0LjIzODI4MSBMIDE4My4zMDg1OTQgMTg0LjIzODI4MSBaIE0gMTgzLjMwODU5NCAxNjEuOTI5Njg4ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgNTAuMzgyODEyIEwgMjA1LjYxNzE4OCA1MC4zODI4MTIgTCAyMDUuNjE3MTg4IDcyLjY5MTQwNiBMIDE4My4zMDg1OTQgNzIuNjkxNDA2IFogTSAxODMuMzA4NTk0IDUwLjM4MjgxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAxNjEgNS43NjE3MTkgTCAxODMuMzA4NTk0IDUuNzYxNzE5IEwgMTgzLjMwODU5NCAyOC4wNzAzMTIgTCAxNjEgMjguMDcwMzEyIFogTSAxNjEgNS43NjE3MTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjA1LjYxNzE4OCAxMzkuNjE3MTg4IEwgMjI3LjkyOTY4OCAxMzkuNjE3MTg4IEwgMjI3LjkyOTY4OCAxNjEuOTI5Njg4IEwgMjA1LjYxNzE4OCAxNjEuOTI5Njg4IFogTSAyMDUuNjE3MTg4IDEzOS42MTcxODggIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjA1LjYxNzE4OCAxODQuMjM4MjgxIEwgMjI3LjkyOTY4OCAxODQuMjM4MjgxIEwgMjI3LjkyOTY4OCAyMDYuNTQ2ODc1IEwgMjA1LjYxNzE4OCAyMDYuNTQ2ODc1IFogTSAyMDUuNjE3MTg4IDE4NC4yMzgyODEgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMTgzLjMwODU5NCAyOC4wNzAzMTIgTCAyMDUuNjE3MTg4IDI4LjA3MDMxMiBMIDIwNS42MTcxODggNTAuMzgyODEyIEwgMTgzLjMwODU5NCA1MC4zODI4MTIgWiBNIDE4My4zMDg1OTQgMjguMDcwMzEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDE4My4zMDg1OTQgNzIuNjkxNDA2IEwgMjA1LjYxNzE4OCA3Mi42OTE0MDYgTCAyMDUuNjE3MTg4IDk1IEwgMTgzLjMwODU5NCA5NSBaIE0gMTgzLjMwODU5NCA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMC04IiB4PSIzMTIuMjE0IiB5PSIzNS4xMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTkiIHg9IjI4OS45MDQ3IiB5PSIzNS4xMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTUiIHg9IjMzNC41MjMzIiB5PSIzNS4xMDgiLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgwLTciIHg9IjI2Ny41OTUzIiB5PSIzNS4xMDgiLz4KPC9nPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMzYuNjE3MTg4IDEzOS42MTcxODggTCAzNTguOTI5Njg4IDEzOS42MTcxODggTCAzNTguOTI5Njg4IDE2MS45Mjk2ODggTCAzMzYuNjE3MTg4IDE2MS45Mjk2ODggWiBNIDMzNi42MTcxODggMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMzYuNjE3MTg4IDE2MS45Mjk2ODggTCAzNTguOTI5Njg4IDE2MS45Mjk2ODggTCAzNTguOTI5Njg4IDE4NC4yMzgyODEgTCAzMzYuNjE3MTg4IDE4NC4yMzgyODEgWiBNIDMzNi42MTcxODggMTYxLjkyOTY4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgMTE3LjMwODU5NCBMIDMxNC4zMDg1OTQgMTE3LjMwODU5NCBMIDMxNC4zMDg1OTQgMTM5LjYxNzE4OCBMIDI5MiAxMzkuNjE3MTg4IFogTSAyOTIgMTE3LjMwODU5NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMTQuMzA4NTk0IDExNy4zMDg1OTQgTCAzMzYuNjE3MTg4IDExNy4zMDg1OTQgTCAzMzYuNjE3MTg4IDEzOS42MTcxODggTCAzMTQuMzA4NTk0IDEzOS42MTcxODggWiBNIDMxNC4zMDg1OTQgMTE3LjMwODU5NCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMTQuMzA4NTk0IDE2MS45Mjk2ODggTCAzMzYuNjE3MTg4IDE2MS45Mjk2ODggTCAzMzYuNjE3MTg4IDE4NC4yMzgyODEgTCAzMTQuMzA4NTk0IDE4NC4yMzgyODEgWiBNIDMxNC4zMDg1OTQgMTYxLjkyOTY4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgMTM5LjYxNzE4OCBMIDMxNC4zMDg1OTQgMTM5LjYxNzE4OCBMIDMxNC4zMDg1OTQgMTYxLjkyOTY4OCBMIDI5MiAxNjEuOTI5Njg4IFogTSAyOTIgMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMzYuNjE3MTg4IDUwLjM4MjgxMiBMIDM1OC45Mjk2ODggNTAuMzgyODEyIEwgMzU4LjkyOTY4OCA3Mi42OTE0MDYgTCAzMzYuNjE3MTg4IDcyLjY5MTQwNiBaIE0gMzM2LjYxNzE4OCA1MC4zODI4MTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzM2LjYxNzE4OCAyOC4wNzAzMTIgTCAzNTguOTI5Njg4IDI4LjA3MDMxMiBMIDM1OC45Mjk2ODggNTAuMzgyODEyIEwgMzM2LjYxNzE4OCA1MC4zODI4MTIgWiBNIDMzNi42MTcxODggMjguMDcwMzEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDMxNC4zMDg1OTQgNS43NjE3MTkgTCAzMzYuNjE3MTg4IDUuNzYxNzE5IEwgMzM2LjYxNzE4OCAyOC4wNzAzMTIgTCAzMTQuMzA4NTk0IDI4LjA3MDMxMiBaIE0gMzE0LjMwODU5NCA1Ljc2MTcxOSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgOTUgTCAzMTQuMzA4NTk0IDk1IEwgMzE0LjMwODU5NCAxMTcuMzA4NTk0IEwgMjkyIDExNy4zMDg1OTQgWiBNIDI5MiA5NSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgMTYxLjkyOTY4OCBMIDMxNC4zMDg1OTQgMTYxLjkyOTY4OCBMIDMxNC4zMDg1OTQgMTg0LjIzODI4MSBMIDI5MiAxODQuMjM4MjgxIFogTSAyOTIgMTYxLjkyOTY4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoNjkuODA0MzgyJSw4NS4wOTgyNjclLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgMTg0LjIzODI4MSBMIDMxNC4zMDg1OTQgMTg0LjIzODI4MSBMIDMxNC4zMDg1OTQgMjA2LjU0Njg3NSBMIDI5MiAyMDYuNTQ2ODc1IFogTSAyOTIgMTg0LjIzODI4MSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjI4Ny4xNTY3IiB5PSIyMzQuODkyIi8+CjwvZz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi03IiB4PSIyOTEuMTUyNyIgeT0iMjM3Ljg5MiIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi0xIiB4PSIyOTQuMTUyNyIgeT0iMjM3Ljg5MiIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDMxNC4zMDg1OTQgOTUgTCAzMzYuNjE3MTg4IDk1IEwgMzM2LjYxNzE4OCAxMTcuMzA4NTk0IEwgMzE0LjMwODU5NCAxMTcuMzA4NTk0IFogTSAzMTQuMzA4NTk0IDk1ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI2OS42OTE0MDYgMjguMDcwMzEyIEwgMjkyIDI4LjA3MDMxMiBMIDI5MiA1MC4zODI4MTIgTCAyNjkuNjkxNDA2IDUwLjM4MjgxMiBaIE0gMjY5LjY5MTQwNiAyOC4wNzAzMTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzM2LjYxNzE4OCA5NSBMIDM1OC45Mjk2ODggOTUgTCAzNTguOTI5Njg4IDExNy4zMDg1OTQgTCAzMzYuNjE3MTg4IDExNy4zMDg1OTQgWiBNIDMzNi42MTcxODggOTUgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0xIiB4PSIzMzEuNzc1MyIgeT0iMTQ1LjY1NDciLz4KPC9nPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTUiIHg9IjMzNS43NzEzIiB5PSIxNDguNjU0NyIvPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMi02IiB4PSIzMzguNzcxMyIgeT0iMTQ4LjY1NDciLz4KPC9nPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgOTUgTCAyNjkuNjkxNDA2IDk1IEwgMjY5LjY5MTQwNiAxMTcuMzA4NTk0IEwgMjkyIDExNy4zMDg1OTQgWiBNIDI5MiA5NSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgNzIuNjkxNDA2IEwgMjY5LjY5MTQwNiA3Mi42OTE0MDYgTCAyNjkuNjkxNDA2IDk1IEwgMjkyIDk1IFogTSAyOTIgNzIuNjkxNDA2ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDMxNC4zMDg1OTQgNTAuMzgyODEyIEwgMzM2LjYxNzE4OCA1MC4zODI4MTIgTCAzMzYuNjE3MTg4IDcyLjY5MTQwNiBMIDMxNC4zMDg1OTQgNzIuNjkxNDA2IFogTSAzMTQuMzA4NTk0IDUwLjM4MjgxMiAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMTQuMzA4NTk0IDI4LjA3MDMxMiBMIDMzNi42MTcxODggMjguMDcwMzEyIEwgMzM2LjYxNzE4OCA1MC4zODI4MTIgTCAzMTQuMzA4NTk0IDUwLjM4MjgxMiBaIE0gMzE0LjMwODU5NCAyOC4wNzAzMTIgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPGcgc3R5bGU9ImZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiPgogIDx1c2UgeGxpbms6aHJlZj0iI2dseXBoMS0xIiB4PSIzMDkuNDY2IiB5PSI3OC43MjY2NyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMSIgeD0iMzEzLjQ2MiIgeT0iODEuNzI2NjciLz4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMiIgeD0iMzE2LjQ2MiIgeT0iODEuNzI2NjciLz4KPC9nPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAzMTQuMzA4NTk0IDcyLjY5MTQwNiBMIDMzNi42MTcxODggNzIuNjkxNDA2IEwgMzM2LjYxNzE4OCA5NSBMIDMxNC4zMDg1OTQgOTUgWiBNIDMxNC4zMDg1OTQgNzIuNjkxNDA2ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDMzNi42MTcxODggMTg0LjIzODI4MSBMIDM1OC45Mjk2ODggMTg0LjIzODI4MSBMIDM1OC45Mjk2ODggMjA2LjU0Njg3NSBMIDMzNi42MTcxODggMjA2LjU0Njg3NSBaIE0gMzM2LjYxNzE4OCAxODQuMjM4MjgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI5MiA1Ljc2MTcxOSBMIDMxNC4zMDg1OTQgNS43NjE3MTkgTCAzMTQuMzA4NTk0IDI4LjA3MDMxMiBMIDI5MiAyOC4wNzAzMTIgWiBNIDI5MiA1Ljc2MTcxOSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyNjkuNjkxNDA2IDUwLjM4MjgxMiBMIDI5MiA1MC4zODI4MTIgTCAyOTIgNzIuNjkxNDA2IEwgMjY5LjY5MTQwNiA3Mi42OTE0MDYgWiBNIDI2OS42OTE0MDYgNTAuMzgyODEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI5MiAxODQuMjM4MjgxIEwgMjY5LjY5MTQwNiAxODQuMjM4MjgxIEwgMjY5LjY5MTQwNiAyMDYuNTQ2ODc1IEwgMjkyIDIwNi41NDY4NzUgWiBNIDI5MiAxODQuMjM4MjgxICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI5MiAxMTcuMzA4NTk0IEwgMjY5LjY5MTQwNiAxMTcuMzA4NTk0IEwgMjY5LjY5MTQwNiAxMzkuNjE3MTg4IEwgMjkyIDEzOS42MTcxODggWiBNIDI5MiAxMTcuMzA4NTk0ICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDMzNi42MTcxODggNS43NjE3MTkgTCAzNTguOTI5Njg4IDUuNzYxNzE5IEwgMzU4LjkyOTY4OCAyOC4wNzAzMTIgTCAzMzYuNjE3MTg4IDI4LjA3MDMxMiBaIE0gMzM2LjYxNzE4OCA1Ljc2MTcxOSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8cGF0aCBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMTAwJSwxMDAlLDEwMCUpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2U6cmdiKDAlLDAlLDAlKTtzdHJva2Utb3BhY2l0eToxO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIgZD0iTSAyOTIgMTM5LjYxNzE4OCBMIDI2OS42OTE0MDYgMTM5LjYxNzE4OCBMIDI2OS42OTE0MDYgMTYxLjkyOTY4OCBMIDI5MiAxNjEuOTI5Njg4IFogTSAyOTIgMTM5LjYxNzE4OCAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8ZyBzdHlsZT0iZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyI+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgxLTEiIHg9IjI2NC44NDczIiB5PSIxOTAuMjczMyIvPgo8L2c+CjxnIHN0eWxlPSJmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7Ij4KICA8dXNlIHhsaW5rOmhyZWY9IiNnbHlwaDItMyIgeD0iMjY4Ljg0MzMiIHk9IjE5My4yNzMzIi8+CiAgPHVzZSB4bGluazpocmVmPSIjZ2x5cGgyLTQiIHg9IjI3MS44NDMzIiB5PSIxOTMuMjczMyIvPgo8L2c+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDMzNi42MTcxODggNzIuNjkxNDA2IEwgMzU4LjkyOTY4OCA3Mi42OTE0MDYgTCAzNTguOTI5Njg4IDk1IEwgMzM2LjYxNzE4OCA5NSBaIE0gMzM2LjYxNzE4OCA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzM2LjYxNzE4OCAxMTcuMzA4NTk0IEwgMzU4LjkyOTY4OCAxMTcuMzA4NTk0IEwgMzU4LjkyOTY4OCAxMzkuNjE3MTg4IEwgMzM2LjYxNzE4OCAxMzkuNjE3MTg4IFogTSAzMzYuNjE3MTg4IDExNy4zMDg1OTQgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjkyIDE2MS45Mjk2ODggTCAyNjkuNjkxNDA2IDE2MS45Mjk2ODggTCAyNjkuNjkxNDA2IDE4NC4yMzgyODEgTCAyOTIgMTg0LjIzODI4MSBaIE0gMjkyIDE2MS45Mjk2ODggIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjkyIDUwLjM4MjgxMiBMIDMxNC4zMDg1OTQgNTAuMzgyODEyIEwgMzE0LjMwODU5NCA3Mi42OTE0MDYgTCAyOTIgNzIuNjkxNDA2IFogTSAyOTIgNTAuMzgyODEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigxMDAlLDEwMCUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI2OS42OTE0MDYgNS43NjE3MTkgTCAyOTIgNS43NjE3MTkgTCAyOTIgMjguMDcwMzEyIEwgMjY5LjY5MTQwNiAyOC4wNzAzMTIgWiBNIDI2OS42OTE0MDYgNS43NjE3MTkgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzE0LjMwODU5NCAxMzkuNjE3MTg4IEwgMzM2LjYxNzE4OCAxMzkuNjE3MTg4IEwgMzM2LjYxNzE4OCAxNjEuOTI5Njg4IEwgMzE0LjMwODU5NCAxNjEuOTI5Njg4IFogTSAzMTQuMzA4NTk0IDEzOS42MTcxODggIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMzE0LjMwODU5NCAxODQuMjM4MjgxIEwgMzM2LjYxNzE4OCAxODQuMjM4MjgxIEwgMzM2LjYxNzE4OCAyMDYuNTQ2ODc1IEwgMzE0LjMwODU5NCAyMDYuNTQ2ODc1IFogTSAzMTQuMzA4NTk0IDE4NC4yMzgyODEgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDEwMCUsMTAwJSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gMjkyIDI4LjA3MDMxMiBMIDMxNC4zMDg1OTQgMjguMDcwMzEyIEwgMzE0LjMwODU5NCA1MC4zODI4MTIgTCAyOTIgNTAuMzgyODEyIFogTSAyOTIgMjguMDcwMzEyICIgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsMSwtMTEsMzgpIi8+CjxwYXRoIHN0eWxlPSJmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYig2OS44MDQzODIlLDg1LjA5ODI2NyUsMTAwJSk7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZTpyZ2IoMCUsMCUsMCUpO3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlLW1pdGVybGltaXQ6MTA7IiBkPSJNIDI5MiA3Mi42OTE0MDYgTCAzMTQuMzA4NTk0IDcyLjY5MTQwNiBMIDMxNC4zMDg1OTQgOTUgTCAyOTIgOTUgWiBNIDI5MiA3Mi42OTE0MDYgIiB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwxLC0xMSwzOCkiLz4KPHBhdGggc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDY5LjgwNDM4MiUsODUuMDk4MjY3JSwxMDAlKTtmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlOnJnYigwJSwwJSwwJSk7c3Ryb2tlLW9wYWNpdHk6MTtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiIGQ9Ik0gNzQuNjE3MTg4IDUuNzYxNzE5IEwgOTYuOTI5Njg4IDUuNzYxNzE5IEwgOTYuOTI5Njg4IDI4LjA3MDMxMiBMIDc0LjYxNzE4OCAyOC4wNzAzMTIgWiBNIDc0LjYxNzE4OCA1Ljc2MTcxOSAiIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLDEsLTExLDM4KSIvPgo8L2c+Cjwvc3ZnPgo="]}},"cell_type":"markdown","metadata":{"graffitiCellId":"id_dexi436","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"BA19ABB6788D463E880223B6932C1769","mdEditEnable":false},"source":"## 9.4.3 标注训练集的锚框\n\n在训练集中，我们将每个锚框视为一个训练样本。为了训练目标检测模型，我们需要为每个锚框标注两类标签：一是锚框所含目标的类别，简称类别；二是真实边界框相对锚框的偏移量，简称偏移量（offset）。在目标检测时，我们首先生成多个锚框，然后为每个锚框预测类别以及偏移量，接着根据预测的偏移量调整锚框位置从而得到预测边界框，最后筛选需要输出的预测边界框。\n\n\n我们知道，在目标检测的训练集中，每个图像已标注了真实边界框的位置以及所含目标的类别。在生成锚框之后，我们主要依据与锚框相似的真实边界框的位置和类别信息为锚框标注。那么，该如何为锚框分配与其相似的真实边界框呢？\n\n\n假设图像中锚框分别为$A_1, A_2, \\ldots, A_{n_a}$，真实边界框分别为$B_1, B_2, \\ldots, B_{n_b}$，且$n_a \\geq n_b$。定义矩阵$\\boldsymbol{X} \\in \\mathbb{R}^{n_a \\times n_b}$，其中第$i$行第$j$列的元素$x_{ij}$为锚框$A_i$与真实边界框$B_j$的交并比。\n首先，我们找出矩阵$\\boldsymbol{X}$中最大元素，并将该元素的行索引与列索引分别记为$i_1,j_1$。我们为锚框$A_{i_1}$分配真实边界框$B_{j_1}$。显然，锚框$A_{i_1}$和真实边界框$B_{j_1}$在所有的“锚框—真实边界框”的配对中相似度最高。接下来，将矩阵$\\boldsymbol{X}$中第$i_1$行和第$j_1$列上的所有元素丢弃。找出矩阵$\\boldsymbol{X}$中剩余的最大元素，并将该元素的行索引与列索引分别记为$i_2,j_2$。我们为锚框$A_{i_2}$分配真实边界框$B_{j_2}$，再将矩阵$\\boldsymbol{X}$中第$i_2$行和第$j_2$列上的所有元素丢弃。此时矩阵$\\boldsymbol{X}$中已有两行两列的元素被丢弃。\n依此类推，直到矩阵$\\boldsymbol{X}$中所有$n_b$列元素全部被丢弃。这个时候，我们已为$n_b$个锚框各分配了一个真实边界框。\n接下来，我们只遍历剩余的$n_a - n_b$个锚框：给定其中的锚框$A_i$，根据矩阵$\\boldsymbol{X}$的第$i$行找到与$A_i$交并比最大的真实边界框$B_j$，且只有当该交并比大于预先设定的阈值时，才为锚框$A_i$分配真实边界框$B_j$。\n\n\n如图9.3（左）所示，假设矩阵$\\boldsymbol{X}$中最大值为$x_{23}$，我们将为锚框$A_2$分配真实边界框$B_3$。然后，丢弃矩阵中第2行和第3列的所有元素，找出剩余阴影部分的最大元素$x_{71}$，为锚框$A_7$分配真实边界框$B_1$。接着如图9.3（中）所示，丢弃矩阵中第7行和第1列的所有元素，找出剩余阴影部分的最大元素$x_{54}$，为锚框$A_5$分配真实边界框$B_4$。最后如图9.3（右）所示，丢弃矩阵中第5行和第4列的所有元素，找出剩余阴影部分的最大元素$x_{92}$，为锚框$A_9$分配真实边界框$B_2$。之后，我们只需遍历除去$A_2, A_5, A_7, A_9$的剩余锚框，并根据阈值判断是否为剩余锚框分配真实边界框。\n\n![Image Name](https://cdn.kesci.com/upload/image/q5vsc1hcg8.png?imageView2/0/w/640/h/640)\n\n现在我们可以标注锚框的类别和偏移量了。如果一个锚框$A$被分配了真实边界框$B$，将锚框$A$的类别设为$B$的类别，并根据$B$和$A$的中心坐标的相对位置以及两个框的相对大小为锚框$A$标注偏移量。由于数据集中各个框的位置和大小各异，因此这些相对位置和相对大小通常需要一些特殊变换，才能使偏移量的分布更均匀从而更容易拟合。设锚框$A$及其被分配的真实边界框$B$的中心坐标分别为$(x_a, y_a)$和$(x_b, y_b)$，$A$和$B$的宽分别为$w_a$和$w_b$，高分别为$h_a$和$h_b$，一个常用的技巧是将$A$的偏移量标注为\n\n$$\n\\left( \\frac{ \\frac{x_b - x_a}{w_a} - \\mu_x }{\\sigma_x},\n\\frac{ \\frac{y_b - y_a}{h_a} - \\mu_y }{\\sigma_y},\n\\frac{ \\log \\frac{w_b}{w_a} - \\mu_w }{\\sigma_w},\n\\frac{ \\log \\frac{h_b}{h_a} - \\mu_h }{\\sigma_h}\\right),\n$$\n\n其中常数的默认值为$\\mu_x = \\mu_y = \\mu_w = \\mu_h = 0, \\sigma_x=\\sigma_y=0.1, \\sigma_w=\\sigma_h=0.2$。如果一个锚框没有被分配真实边界框，我们只需将该锚框的类别设为背景。类别为背景的锚框通常被称为负类锚框，其余则被称为正类锚框。\n\n\n下面演示一个具体的例子。我们为读取的图像中的猫和狗定义真实边界框，其中第一个元素为类别（0为狗，1为猫），剩余4个元素分别为左上角的$x$和$y$轴坐标以及右下角的$x$和$y$轴坐标（值域在0到1之间）。这里通过左上角和右下角的坐标构造了5个需要标注的锚框，分别记为$A_0, \\ldots, A_4$（程序中索引从0开始）。先画出这些锚框与真实边界框在图像中的位置。"},{"cell_type":"code","execution_count":17,"metadata":{"graffitiCellId":"id_dc3fn4d","scrolled":false,"jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"EE440F7DF1044779979C9EE9F4906CDC","collapsed":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/EE440F7DF1044779979C9EE9F4906CDC/q5vscwrldv.svg\">"},"transient":{}}],"source":"bbox_scale = torch.tensor((w, h, w, h), dtype=torch.float32)\nground_truth = torch.tensor([[0, 0.1, 0.08, 0.52, 0.92],\n                            [1, 0.55, 0.2, 0.9, 0.88]])\nanchors = torch.tensor([[0, 0.1, 0.2, 0.3], [0.15, 0.2, 0.4, 0.4],\n                    [0.63, 0.05, 0.88, 0.98], [0.66, 0.45, 0.8, 0.8],\n                    [0.57, 0.3, 0.92, 0.9]])\n\nfig = d2l.plt.imshow(img)\nshow_bboxes(fig.axes, ground_truth[:, 1:] * bbox_scale, ['dog', 'cat'], 'k')\nshow_bboxes(fig.axes, anchors * bbox_scale, ['0', '1', '2', '3', '4']);"},{"cell_type":"code","execution_count":18,"metadata":{"graffitiCellId":"id_s0tnkxy","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"82C2532A165E49E38882A610B323F41C","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"tensor([[0.0536, 0.0000],\n        [0.1417, 0.0000],\n        [0.0000, 0.5657],\n        [0.0000, 0.2059],\n        [0.0000, 0.7459]])"},"transient":{},"execution_count":18}],"source":"compute_jaccard(anchors, ground_truth[:, 1:]) # 验证一下写的compute_jaccard函数"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_iwux97l","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"5DF900CB5F5C4E62B1A29F25C0631CA6","mdEditEnable":false},"source":"\n下面实现`MultiBoxTarget`函数来为锚框标注类别和偏移量。该函数将背景类别设为0，并令从零开始的目标类别的整数索引自加1（1为狗，2为猫）。\n"},{"cell_type":"code","execution_count":19,"metadata":{"graffitiCellId":"id_t0k8dlx","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"F752953425DE4B9FAFB90D799B98EFA4","collapsed":false,"scrolled":false},"outputs":[],"source":"# 以下函数已保存在d2lzh_pytorch包中方便以后使用\ndef assign_anchor(bb, anchor, jaccard_threshold=0.5):\n    \"\"\"\n    # 按照「9.4.1. 生成多个锚框」图9.3所讲为每个anchor分配真实的bb, anchor表示成归一化(xmin, ymin, xmax, ymax).\n    https://zh.d2l.ai/chapter_computer-vision/anchor.html\n    Args:\n        bb: 真实边界框(bounding box), shape:（nb, 4）\n        anchor: 待分配的anchor, shape:（na, 4）\n        jaccard_threshold: 预先设定的阈值\n    Returns:\n        assigned_idx: shape: (na, ), 每个anchor分配的真实bb对应的索引, 若未分配任何bb则为-1\n    \"\"\"\n    na = anchor.shape[0] \n    nb = bb.shape[0]\n    jaccard = compute_jaccard(anchor, bb).detach().cpu().numpy() # shape: (na, nb)\n    assigned_idx = np.ones(na) * -1  # 存放标签初始全为-1\n    \n    # 先为每个bb分配一个anchor(不要求满足jaccard_threshold)\n    jaccard_cp = jaccard.copy()\n    for j in range(nb):\n        i = np.argmax(jaccard_cp[:, j])\n        assigned_idx[i] = j\n        jaccard_cp[i, :] = float(\"-inf\") # 赋值为负无穷, 相当于去掉这一行\n     \n    # 处理还未被分配的anchor, 要求满足jaccard_threshold\n    for i in range(na):\n        if assigned_idx[i] == -1:\n            j = np.argmax(jaccard[i, :])\n            if jaccard[i, j] >= jaccard_threshold:\n                assigned_idx[i] = j\n                \n    return torch.tensor(assigned_idx, dtype=torch.long)\n\n\ndef xy_to_cxcy(xy):\n    \"\"\"\n    将(x_min, y_min, x_max, y_max)形式的anchor转换成(center_x, center_y, w, h)形式的.\n    https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection/blob/master/utils.py\n    Args:\n        xy: bounding boxes in boundary coordinates, a tensor of size (n_boxes, 4)\n    Returns: \n        bounding boxes in center-size coordinates, a tensor of size (n_boxes, 4)\n    \"\"\"\n    return torch.cat([(xy[:, 2:] + xy[:, :2]) / 2,  # c_x, c_y\n                      xy[:, 2:] - xy[:, :2]], 1)  # w, h\n\ndef MultiBoxTarget(anchor, label):\n    \"\"\"\n    # 按照「9.4.1. 生成多个锚框」所讲的实现, anchor表示成归一化(xmin, ymin, xmax, ymax).\n    https://zh.d2l.ai/chapter_computer-vision/anchor.html\n    Args:\n        anchor: torch tensor, 输入的锚框, 一般是通过MultiBoxPrior生成, shape:（1，锚框总数，4）\n        label: 真实标签, shape为(bn, 每张图片最多的真实锚框数, 5)\n               第二维中，如果给定图片没有这么多锚框, 可以先用-1填充空白, 最后一维中的元素为[类别标签, 四个坐标值]\n    Returns:\n        列表, [bbox_offset, bbox_mask, cls_labels]\n        bbox_offset: 每个锚框的标注偏移量，形状为(bn，锚框总数*4)\n        bbox_mask: 形状同bbox_offset, 每个锚框的掩码, 一一对应上面的偏移量, 负类锚框(背景)对应的掩码均为0, 正类锚框的掩码均为1\n        cls_labels: 每个锚框的标注类别, 其中0表示为背景, 形状为(bn，锚框总数)\n    \"\"\"\n    assert len(anchor.shape) == 3 and len(label.shape) == 3\n    bn = label.shape[0]\n    \n    def MultiBoxTarget_one(anc, lab, eps=1e-6):\n        \"\"\"\n        MultiBoxTarget函数的辅助函数, 处理batch中的一个\n        Args:\n            anc: shape of (锚框总数, 4)\n            lab: shape of (真实锚框数, 5), 5代表[类别标签, 四个坐标值]\n            eps: 一个极小值, 防止log0\n        Returns:\n            offset: (锚框总数*4, )\n            bbox_mask: (锚框总数*4, ), 0代表背景, 1代表非背景\n            cls_labels: (锚框总数, 4), 0代表背景\n        \"\"\"\n        an = anc.shape[0]\n        # 变量的意义\n        assigned_idx = assign_anchor(lab[:, 1:], anc) # (锚框总数, )\n        print(\"a: \",  assigned_idx.shape)\n        print(assigned_idx)\n        bbox_mask = ((assigned_idx >= 0).float().unsqueeze(-1)).repeat(1, 4) # (锚框总数, 4)\n        print(\"b: \" , bbox_mask.shape)\n        print(bbox_mask)\n\n        cls_labels = torch.zeros(an, dtype=torch.long) # 0表示背景\n        assigned_bb = torch.zeros((an, 4), dtype=torch.float32) # 所有anchor对应的bb坐标\n        for i in range(an):\n            bb_idx = assigned_idx[i]\n            if bb_idx >= 0: # 即非背景\n                cls_labels[i] = lab[bb_idx, 0].long().item() + 1 # 注意要加一\n                assigned_bb[i, :] = lab[bb_idx, 1:]\n        # 如何计算偏移量\n        center_anc = xy_to_cxcy(anc) # (center_x, center_y, w, h)\n        center_assigned_bb = xy_to_cxcy(assigned_bb)\n\n        offset_xy = 10.0 * (center_assigned_bb[:, :2] - center_anc[:, :2]) / center_anc[:, 2:]\n        offset_wh = 5.0 * torch.log(eps + center_assigned_bb[:, 2:] / center_anc[:, 2:])\n        offset = torch.cat([offset_xy, offset_wh], dim = 1) * bbox_mask # (锚框总数, 4)\n\n        return offset.view(-1), bbox_mask.view(-1), cls_labels\n    # 组合输出\n    batch_offset = []\n    batch_mask = []\n    batch_cls_labels = []\n    for b in range(bn):\n        offset, bbox_mask, cls_labels = MultiBoxTarget_one(anchor[0, :, :], label[b, :, :])\n        \n        batch_offset.append(offset)\n        batch_mask.append(bbox_mask)\n        batch_cls_labels.append(cls_labels)\n    \n    bbox_offset = torch.stack(batch_offset)\n    bbox_mask = torch.stack(batch_mask)\n    cls_labels = torch.stack(batch_cls_labels)\n    \n    return [bbox_offset, bbox_mask, cls_labels]"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_3c4rh47","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"EA40302D9DC54A038D0991E2B548F865","mdEditEnable":false},"source":"我们通过`unsqueeze`函数为锚框和真实边界框添加样本维。"},{"cell_type":"code","execution_count":20,"metadata":{"graffitiCellId":"id_p5u2kh5","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"962B76B2F8774902AF4F0FC50CE0FE78","collapsed":false,"scrolled":false},"outputs":[{"output_type":"stream","text":"a:  torch.Size([5])\ntensor([-1,  0,  1, -1,  1])\nb:  torch.Size([5, 4])\ntensor([[0., 0., 0., 0.],\n        [1., 1., 1., 1.],\n        [1., 1., 1., 1.],\n        [0., 0., 0., 0.],\n        [1., 1., 1., 1.]])\n","name":"stdout"}],"source":"labels = MultiBoxTarget(anchors.unsqueeze(dim=0),\n                        ground_truth.unsqueeze(dim=0))"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_80n1mvs","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"D4F6080AAADB4E828BD2A0B23D5F4B76","mdEditEnable":false},"source":"返回的结果里有3项，均为`Tensor`。第三项表示为锚框标注的类别。"},{"cell_type":"code","execution_count":21,"metadata":{"graffitiCellId":"id_qq5gg2i","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"134F85B4431D4FD783496D7B5B33048C","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"tensor([[0, 1, 2, 0, 2]])"},"transient":{},"execution_count":21}],"source":"labels[2]"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_kh52x1f","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"C436E21C93874BD3AA8DA8C9B56FC73A","mdEditEnable":false},"source":"我们根据锚框与真实边界框在图像中的位置来分析这些标注的类别。首先，在所有的“锚框—真实边界框”的配对中，锚框$A_4$与猫的真实边界框的交并比最大，因此锚框$A_4$的类别标注为猫。不考虑锚框$A_4$或猫的真实边界框，在剩余的“锚框—真实边界框”的配对中，最大交并比的配对为锚框$A_1$和狗的真实边界框，因此锚框$A_1$的类别标注为狗。接下来遍历未标注的剩余3个锚框：与锚框$A_0$交并比最大的真实边界框的类别为狗，但交并比小于阈值（默认为0.5），因此类别标注为背景；与锚框$A_2$交并比最大的真实边界框的类别为猫，且交并比大于阈值，因此类别标注为猫；与锚框$A_3$交并比最大的真实边界框的类别为猫，但交并比小于阈值，因此类别标注为背景。\n\n\n返回值的第二项为掩码（mask）变量，形状为(批量大小, 锚框个数的四倍)。掩码变量中的元素与每个锚框的4个偏移量一一对应。\n由于我们不关心对背景的检测，有关负类的偏移量不应影响目标函数。通过按元素乘法，掩码变量中的0可以在计算目标函数之前过滤掉负类的偏移量。"},{"cell_type":"code","execution_count":22,"metadata":{"graffitiCellId":"id_h5f7kko","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"9719FFAC72674C3A84B5CC95479E7844","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"tensor([[0., 0., 0., 0., 1., 1., 1., 1., 1., 1., 1., 1., 0., 0., 0., 0., 1., 1.,\n         1., 1.]])"},"transient":{},"execution_count":22}],"source":"labels[1]"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_f9p7m6x","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"98EC2DB94F7443FBAB3295CC50C624BC","mdEditEnable":false},"source":"返回的第一项是为每个锚框标注的四个偏移量，其中负类锚框的偏移量标注为0。"},{"cell_type":"code","execution_count":23,"metadata":{"graffitiCellId":"id_473p2sy","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"61A3474A4EE44D8FAF829A23DDBAA208","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"tensor([[-0.0000e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,  1.4000e+00,\n          1.0000e+01,  2.5940e+00,  7.1754e+00, -1.2000e+00,  2.6882e-01,\n          1.6824e+00, -1.5655e+00, -0.0000e+00, -0.0000e+00, -0.0000e+00,\n         -0.0000e+00, -5.7143e-01, -1.0000e+00,  4.1723e-06,  6.2582e-01]])"},"transient":{},"execution_count":23}],"source":"labels[0]"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_y2qa1qt","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"4C21C5BE5BDC4D308E9C55E1D5250B16","mdEditEnable":false},"source":"## 9.4.4. 输出预测边界框"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_80q8t71","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"11D878A176D5451193A08B7E46F331CB","mdEditEnable":false},"source":"在模型预测阶段，我们先为图像生成多个锚框，并为这些锚框一一预测类别和偏移量。随后，我们根据锚框及其预测偏移量得到预测边界框。当锚框数量较多时，同一个目标上可能会输出较多相似的预测边界框。为了使结果更加简洁，我们可以移除相似的预测边界框。常用的方法叫作非极大值抑制（non-maximum suppression，NMS）。\n\n我们来描述一下非极大值抑制的工作原理。对于一个预测边界框$B$，模型会计算各个类别的预测概率。设其中最大的预测概率为$p$，该概率所对应的类别即$B$的预测类别。我们也将$p$称为预测边界框$B$的置信度。在同一图像上，我们将预测类别非背景的预测边界框按置信度从高到低排序，得到列表$L$。从$L$中选取置信度最高的预测边界框$B_1$作为基准，将所有与$B_1$的交并比大于某阈值的非基准预测边界框从$L$中移除。这里的阈值是预先设定的超参数。此时，$L$保留了置信度最高的预测边界框并移除了与其相似的其他预测边界框。\n接下来，从$L$中选取置信度第二高的预测边界框$B_2$作为基准，将所有与$B_2$的交并比大于某阈值的非基准预测边界框从$L$中移除。重复这一过程，直到$L$中所有的预测边界框都曾作为基准。此时$L$中任意一对预测边界框的交并比都小于阈值。最终，输出列表$L$中的所有预测边界框。\n\n下面来看一个具体的例子。先构造4个锚框。简单起见，我们假设预测偏移量全是0：预测边界框即锚框。最后，我们构造每个类别的预测概率。"},{"cell_type":"code","execution_count":24,"metadata":{"graffitiCellId":"id_7ob7ov2","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"CD3C5B1557B746119EC3C1FD04D7AF54","collapsed":false,"scrolled":false},"outputs":[],"source":"anchors = torch.tensor([[0.1, 0.08, 0.52, 0.92], [0.08, 0.2, 0.56, 0.95],\n                        [0.15, 0.3, 0.62, 0.91], [0.55, 0.2, 0.9, 0.88]])\noffset_preds = torch.tensor([0.0] * (4 * len(anchors)))\ncls_probs = torch.tensor([[0., 0., 0., 0.,],  # 背景的预测概率\n                          [0.9, 0.8, 0.7, 0.1],  # 狗的预测概率\n                          [0.1, 0.2, 0.3, 0.9]])  # 猫的预测概率"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_e2utkiq","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"F650A19C73B94AD6BDACBA3E98FF167A","mdEditEnable":false},"source":"在图像上打印预测边界框和它们的置信度。"},{"cell_type":"code","execution_count":25,"metadata":{"graffitiCellId":"id_rhs2pam","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"9A3523CA158741A9BE840976BD280FCD","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/9A3523CA158741A9BE840976BD280FCD/q5vse9q5nx.svg\">"},"transient":{}}],"source":"fig = d2l.plt.imshow(img)\nshow_bboxes(fig.axes, anchors * bbox_scale,\n            ['dog=0.9', 'dog=0.8', 'dog=0.7', 'cat=0.9'])"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_pz0xz8f","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"2D54C8E798D3435384131A4C2E8508B4","mdEditEnable":false},"source":"\n下面我们实现`MultiBoxDetection`函数来执行非极大值抑制。\n"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_rba2nhy","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"C170FF17CDEF440F8BF378F3D8497D41","mdEditEnable":false},"source":"%% Below, type any markdown to display in the Graffiti tip.\n%% Then run this cell to save it.\nsorted"},{"cell_type":"code","execution_count":26,"metadata":{"graffitiCellId":"id_rt5r686","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"A67A98C985F6464789960CD04D518F34","collapsed":false,"scrolled":false},"outputs":[],"source":"# 以下函数已保存在d2lzh_pytorch包中方便以后使用\nfrom collections import namedtuple\nPred_BB_Info = namedtuple(\"Pred_BB_Info\", [\"index\", \"class_id\", \"confidence\", \"xyxy\"])\n\ndef non_max_suppression(bb_info_list, nms_threshold = 0.5):\n    \"\"\"\n    非极大抑制处理预测的边界框\n    Args:\n        bb_info_list: Pred_BB_Info的列表, 包含预测类别、置信度等信息\n        nms_threshold: 阈值\n    Returns:\n        output: Pred_BB_Info的列表, 只保留过滤后的边界框信息\n    \"\"\"\n    output = []\n    # 先根据置信度从高到低排序\n    sorted_bb_info_list = sorted(bb_info_list, key = lambda x: x.confidence, reverse=True)\n    \n    # 循环遍历删除冗余输出\n    while len(sorted_bb_info_list) != 0:\n        best = sorted_bb_info_list.pop(0)\n        output.append(best)\n        \n        if len(sorted_bb_info_list) == 0:\n            break\n\n        bb_xyxy = []\n        for bb in sorted_bb_info_list:\n            bb_xyxy.append(bb.xyxy)\n        \n        iou = compute_jaccard(torch.tensor([best.xyxy]), \n                              torch.tensor(bb_xyxy))[0] # shape: (len(sorted_bb_info_list), )\n        \n        n = len(sorted_bb_info_list)\n        sorted_bb_info_list = [sorted_bb_info_list[i] for i in range(n) if iou[i] <= nms_threshold]\n    return output\n\ndef MultiBoxDetection(cls_prob, loc_pred, anchor, nms_threshold = 0.5):\n    \"\"\"\n    # 按照「9.4.1. 生成多个锚框」所讲的实现, anchor表示成归一化(xmin, ymin, xmax, ymax).\n    https://zh.d2l.ai/chapter_computer-vision/anchor.html\n    Args:\n        cls_prob: 经过softmax后得到的各个锚框的预测概率, shape:(bn, 预测总类别数+1, 锚框个数)\n        loc_pred: 预测的各个锚框的偏移量, shape:(bn, 锚框个数*4)\n        anchor: MultiBoxPrior输出的默认锚框, shape: (1, 锚框个数, 4)\n        nms_threshold: 非极大抑制中的阈值\n    Returns:\n        所有锚框的信息, shape: (bn, 锚框个数, 6)\n        每个锚框信息由[class_id, confidence, xmin, ymin, xmax, ymax]表示\n        class_id=-1 表示背景或在非极大值抑制中被移除了\n    \"\"\"\n    assert len(cls_prob.shape) == 3 and len(loc_pred.shape) == 2 and len(anchor.shape) == 3\n    bn = cls_prob.shape[0]\n    \n    def MultiBoxDetection_one(c_p, l_p, anc, nms_threshold = 0.5):\n        \"\"\"\n        MultiBoxDetection的辅助函数, 处理batch中的一个\n        Args:\n            c_p: (预测总类别数+1, 锚框个数)\n            l_p: (锚框个数*4, )\n            anc: (锚框个数, 4)\n            nms_threshold: 非极大抑制中的阈值\n        Return:\n            output: (锚框个数, 6)\n        \"\"\"\n        pred_bb_num = c_p.shape[1]\n        anc = (anc + l_p.view(pred_bb_num, 4)).detach().cpu().numpy() # 加上偏移量\n        \n        confidence, class_id = torch.max(c_p, 0)\n        confidence = confidence.detach().cpu().numpy()\n        class_id = class_id.detach().cpu().numpy()\n        \n        pred_bb_info = [Pred_BB_Info(\n                            index = i,\n                            class_id = class_id[i] - 1, # 正类label从0开始\n                            confidence = confidence[i],\n                            xyxy=[*anc[i]]) # xyxy是个列表\n                        for i in range(pred_bb_num)]\n        \n        # 正类的index\n        obj_bb_idx = [bb.index for bb in non_max_suppression(pred_bb_info, nms_threshold)]\n        \n        output = []\n        for bb in pred_bb_info:\n            output.append([\n                (bb.class_id if bb.index in obj_bb_idx else -1.0),\n                bb.confidence,\n                *bb.xyxy\n            ])\n            \n        return torch.tensor(output) # shape: (锚框个数, 6)\n    \n    batch_output = []\n    for b in range(bn):\n        batch_output.append(MultiBoxDetection_one(cls_prob[b], loc_pred[b], anchor[0], nms_threshold))\n    \n    return torch.stack(batch_output)"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_wwilk2p","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"CB6DCC447C404CB5A0A536EBC835F83A","mdEditEnable":false},"source":"然后我们运行`MultiBoxDetection`函数并设阈值为0.5。这里为输入都增加了样本维。我们看到，返回的结果的形状为(批量大小, 锚框个数, 6)。其中每一行的6个元素代表同一个预测边界框的输出信息。第一个元素是索引从0开始计数的预测类别（0为狗，1为猫），其中-1表示背景或在非极大值抑制中被移除。第二个元素是预测边界框的置信度。剩余的4个元素分别是预测边界框左上角的$x$和$y$轴坐标以及右下角的$x$和$y$轴坐标（值域在0到1之间）。\n"},{"cell_type":"code","execution_count":27,"metadata":{"graffitiCellId":"id_jynblea","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"A29A219B8C7046648EF5AFE3F45E0CB6","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"tensor([[[ 0.0000,  0.9000,  0.1000,  0.0800,  0.5200,  0.9200],\n         [-1.0000,  0.8000,  0.0800,  0.2000,  0.5600,  0.9500],\n         [-1.0000,  0.7000,  0.1500,  0.3000,  0.6200,  0.9100],\n         [ 1.0000,  0.9000,  0.5500,  0.2000,  0.9000,  0.8800]]])"},"transient":{},"execution_count":27}],"source":"output = MultiBoxDetection(\n    cls_probs.unsqueeze(dim=0), offset_preds.unsqueeze(dim=0),\n    anchors.unsqueeze(dim=0), nms_threshold=0.5)\noutput"},{"cell_type":"code","execution_count":28,"metadata":{"graffitiCellId":"id_9glop5q","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"20C0E67E283D4D4BBF20B9E2A4F46915","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/20C0E67E283D4D4BBF20B9E2A4F46915/q5vsen38ta.svg\">"},"transient":{}}],"source":"fig = d2l.plt.imshow(img)\nfor i in output[0].detach().cpu().numpy():\n    if i[0] == -1:\n        continue\n    label = ('dog=', 'cat=')[int(i[0])] + str(i[1])\n    show_bboxes(fig.axes, [torch.tensor(i[2:]) * bbox_scale], label)"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_8lpy48w","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"BBC736BCDAC34F6C87F6E5F3494E5DEE","mdEditEnable":false},"source":"\n实践中，我们可以在执行非极大值抑制前将置信度较低的预测边界框移除，从而减小非极大值抑制的计算量。我们还可以筛选非极大值抑制的输出，例如，只保留其中置信度较高的结果作为最终输出。\n\n\n## 小结\n\n* 以每个像素为中心，生成多个大小和宽高比不同的锚框。\n* 交并比是两个边界框相交面积与相并面积之比。\n* 在训练集中，为每个锚框标注两类标签：一是锚框所含目标的类别；二是真实边界框相对锚框的偏移量。\n* 预测时，可以使用非极大值抑制来移除相似的预测边界框，从而令结果简洁。"},{"cell_type":"markdown","metadata":{"graffitiCellId":"id_95p6zbf","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"E9BC5338559643EC93B278A8DFFD82C3","mdEditEnable":false},"source":"# 9.5 多尺度目标检测\n在9.4节（锚框）中，我们在实验中以输入图像的每个像素为中心生成多个锚框。这些锚框是对输入图像不同区域的采样。然而，如果以图像每个像素为中心都生成锚框，很容易生成过多锚框而造成计算量过大。举个例子，假设输入图像的高和宽分别为561像素和728像素，如果以每个像素为中心生成5个不同形状的锚框，那么一张图像上则需要标注并预测200多万个锚框（$561 \\times 728 \\times 5$）。\n\n减少锚框个数并不难。一种简单的方法是在输入图像中均匀采样一小部分像素，并以采样的像素为中心生成锚框。此外，在不同尺度下，我们可以生成不同数量和不同大小的锚框。值得注意的是，较小目标比较大目标在图像上出现位置的可能性更多。举个简单的例子：形状为$1 \\times 1$、$1 \\times 2$和$2 \\times 2$的目标在形状为$2 \\times 2$的图像上可能出现的位置分别有4、2和1种。因此，当使用较小锚框来检测较小目标时，我们可以采样较多的区域；而当使用较大锚框来检测较大目标时，我们可以采样较少的区域。\n\n为了演示如何多尺度生成锚框，我们先读取一张图像。它的高和宽分别为561像素和728像素。\n"},{"cell_type":"code","execution_count":29,"metadata":{"graffitiCellId":"id_cmjn92g","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"4B95651E081141D68C632D83EB64E9D4","collapsed":false,"scrolled":false},"outputs":[{"output_type":"execute_result","metadata":{},"data":{"text/plain":"(728, 561)"},"transient":{},"execution_count":29}],"source":"w, h = img.size\nw, h"},{"cell_type":"code","execution_count":30,"metadata":{"graffitiCellId":"id_lsu3iq6","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"4240391E34A44AD389138A6B7342C9C8","collapsed":false,"scrolled":false},"outputs":[],"source":"d2l.set_figsize()\n\ndef display_anchors(fmap_w, fmap_h, s):\n    # 前两维的取值不影响输出结果(原书这里是(1, 10, fmap_w, fmap_h), 我认为错了)\n    fmap = torch.zeros((1, 10, fmap_h, fmap_w), dtype=torch.float32)\n    \n    # 平移所有锚框使均匀分布在图片上\n    offset_x, offset_y = 1.0/fmap_w, 1.0/fmap_h\n    anchors = d2l.MultiBoxPrior(fmap, sizes=s, ratios=[1, 2, 0.5]) + \\\n        torch.tensor([offset_x/2, offset_y/2, offset_x/2, offset_y/2])\n    \n    bbox_scale = torch.tensor([[w, h, w, h]], dtype=torch.float32)\n    d2l.show_bboxes(d2l.plt.imshow(img).axes,\n                    anchors[0] * bbox_scale)"},{"cell_type":"code","execution_count":31,"metadata":{"graffitiCellId":"id_0lu1o67","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"FFD6EFB60BAC460A83015115A93376B0","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/FFD6EFB60BAC460A83015115A93376B0/q5vsflnl9m.svg\">"},"transient":{}}],"source":"display_anchors(fmap_w=4, fmap_h=2, s=[0.15])"},{"cell_type":"code","execution_count":32,"metadata":{"graffitiCellId":"id_hyhlrm3","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"B4223FD7BD5D4320B1FDB53445264F79","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/B4223FD7BD5D4320B1FDB53445264F79/q5vsfnl3b0.svg\">"},"transient":{}}],"source":"display_anchors(fmap_w=2, fmap_h=1, s=[0.4])"},{"cell_type":"code","execution_count":33,"metadata":{"graffitiCellId":"id_8nnyfb5","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"},"id":"1A763C2BB5BA404092B31C190A963A17","collapsed":false,"scrolled":false},"outputs":[{"output_type":"display_data","metadata":{"needs_background":"light"},"data":{"text/plain":"<Figure size 252x180 with 1 Axes>","text/html":"<img src=\"https://cdn.kesci.com/rt_upload/1A763C2BB5BA404092B31C190A963A17/q5vsfq54gp.svg\">"},"transient":{}}],"source":"display_anchors(fmap_w=1, fmap_h=1, s=[0.8])"},{"metadata":{"id":"BBE55A824CB140118F472F552943ABBB","jupyter":{},"tags":[],"slideshow":{"slide_type":"slide"}},"cell_type":"code","outputs":[],"source":"","execution_count":null}],"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}